Как в php отсортировать двумерный ассоциативный массив в зависимости от параметра?
Есть двумерный ассоциативный массив в php.
$array = array(
'37' => array(
'term_id' => '37',
'name' => 'BMW',
'slug' => 'bmw',
'count' => '3',
),
'22' => array(
'term_id' => '22',
'name' => 'Mercedes',
'slug' => 'Mercedes',
'count' => '2',
),
'18' => array(
'term_id' => '18',
'name' => 'Honda',
'slug' => 'honda',
'count' => '6',
),
'51' => array(
'term_id' => '51',
'name' => 'Alfa Romeo',
'slug' => 'alfa-romeo',
),
'90' => array(
'term_id' => '90',
'name' => 'Tesla',
'slug' => 'tesla',
'count' => '1',
)
);
Мне нужно отсортировать его по возрастанию в зависимости от параметра count внутри элементов, причем самого параметра может и не быть, тогда оставлять элементы в том же порядке для последующего вывода.
Не могу понять, как правильно вставить массив в определенную позицию
$buff_array = [];
foreach ($array as $item) {
if($item->count) {
$buff_array = array_splice( $buff_array, $count, 0, $item );
}
else {
$buff_array[] = $item;
}
}
Ответы (1 шт):
Автор решения: Вася
→ Ссылка
При таком решении у меня все полностью заработало
uasort(
$array,
function ($item1, $item2) {
if (!isset($item1['count']) && !isset($item2['count'])) {
return 0;
}
if (!isset($item1['count'])) {
return 1;
}
if (!isset($item2['count'])) {
return -1;
}
if ($item1['count'] == $item2['count']) {
return 1;
}
return $item1['count'] - $item2['count'];
}
);
Если честно, сам не понял почему понадобилось условие с возвратом 1, а не нуля, но, именно в этом случае при равенстве счетчиков, равные элементы остаются на своих местах и не меняют своих позиций
if ($item1['count'] == $item2['count']) {
return 1;
}