Я хотел бы отсортировать массив массивов на основе элемента этих последних (поле «clock», type = string). Мой массив имеет следующую модель:PHP: изменения при сортировке моего многомерного массива не регистрируются
Fusion
|
| Array_1
| |
| | Array_1_1
| | | clock => "08:08"
| | | //Other fields
| | |
| |
| | Array_1_2
| | | clock => "04:51"
| | | //Other fields
| | |
|
| Array_2
| ...
Я попытался его с помощью функции usort
, или с выбора сорта. Вот мой реальный код (выбор сортировки):
foreach ($fusion as $fus){
for($i = 0 ; $i < count($fus) ; $i++){
$min = $i;
for($j = $i+1 ; $j < count($fus) ; $j++){
//conversion from string to date to compare properly
$date1 = date_create_from_format('H:i',$fus[$j]['clock']);
$date2 = date_create_from_format('H:i',$fus[$min]['clock']);
if($date1 < $date2){
$min = $j;
}
}
if($min != $i){
$tmp = $fus[$i];
$fus[$i] = $fus[$min];
$fus[$min] = $tmp;
}
}
}
Когда я запускаю мой код, я не могу видеть, что изменения в Arrays_X происходят хорошо, но когда я печатаю весь массив, сортировочные изменения больше не присутствуют, например, :
Перед сортировкой:
Array (
[0] => Array ([clock] => 16:49 //other fields)
[1] => Array ([clock] => 00:04 ...)
[2] => Array ([clock] => 22:01 ...))
После сортировки (OK):
Array (
[0] => Array ([clock] => 00:04 ...)
[1] => Array ([clock] => 16:49 ...)
[2] => Array ([clock] => 22:01 ...))
С весь массив (KO):
[...]
Array (
[0] => Array ([clock] => 16:49 ...)
[1] => Array ([clock] => 00:04 ...)
[2] => Array ([clock] => 22:01 ...))
[...]
Как вы можете видеть, изменения больше не присутствуют.
У вас есть идея? Я не понимаю, почему изменения не зарегистрированы ... Спасибо за вашу помощь.
ОТВЕТ:
Благодаря splash58: добавить '&' перед $fus
в инструкции Еогеасп:
foreach ($fusion as &$fus){
foreach ($ fusion as & $ fus) {? – splash58
@ splash58 Я хочу сделать сортировку на каждом массиве Array_X. Все они содержатся в массиве под названием '$ fusion'. – morandmr
i mean - add '&' – splash58