Я хотел бы отсортировать массив массивов на основе элемента этих последних (поле «часы», тип = строка). Мой массив имеет следующую модель:
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 ... ) )
После сортировки (ОК):
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:
foreach ($fusion as &$fus){
$fusion
. - person morandmr   schedule 18.07.2016