Вы можете использовать функцию массива usort для получения первых записей минимальных значений, затем использовать временный массив и запустить функцию foreach для удаления дубликатов записей.
У меня ниже код работает нормально.
<?php
$arr = array(
[
'model_id' => 1,
'price' => 2000
],
[
'model_id' => 2,
'price' => 3000
],
[
'model_id' => 1,
'price' => 1500
]
);
usort($arr, function ($a, $b) {
return $a['price'] - $b['price'];
});
$input = $arr;
$temp = array();
$keys = array();
foreach ( $input as $key => $data ) {
unset($data['price']);
if ( !in_array($data, $temp) ) {
$temp[] = $data;
$keys[$key] = true;
}
}
$output = array_intersect_key($input, $keys);
print_r($output);