Имеется ассоциативный массив массивов объектов. Необходимо отсортировать массивы объектов. Сам ассоциативный массив трогать не надо.
Пример (цифры вместо объектов для упрощения):
$arr['key1'] = [2, 3, 1];
$arr['key2'] = [20, 30, 1];
...
1) Код ниже не меняет порядка элементов в массиве массивов:
foreach ($result as $item) {
usort($item, function ($a, $b) {
return $b->value <=> $a->value;
});
}
Массив объектов $arr['key1']
не поменял порядка элементов.
2) Немного поменяв код:
// foreach ($result as $item) {
usort($result['key1'], function ($a, $b) {
return $b->value <=> $a->value;
});
// }
Объекты в $arr['key1']
отсортированы.
Я не силен в PHP. Возможно есть нюансы в работе foreach и как передаются значения(по ссылке или копируются). Вопрос: Почему так получилось и не работает 1 вариант? Как правильно и "аккуратно" отсортировать массивы внутри ассоциативного массива.
Код ниже не меняет порядка элементов в массиве массивов:
целиком это утверждение корректно. А вот если взять только первую часть
Код ниже не меняет порядка элементов
то она будет ошибочна. можете в цикле сделать print_r($item)
и увидите что элементы будут отсортированы.
Суть проблемы в том, что вы сортируете копию каждого элемента основного массива. Возьмите элемент по ссылке, и тогда все будет работать ожидаемо
foreach($result as &$item){
...
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
не получается понизить версию PHP, вчера обновился до 72, но сегодня решил обратно
Пользуюсь автокомплитом в ИдееПо итогу Идея пишет что не может разрешить имя 'newMusic'
Нужно, чтобы в окне не работали горячие клавиши, кнопка win и тп