PHP: изменения при сортировке моего многомерного массива не зарегистрированы

Я хотел бы отсортировать массив массивов, основываясь на элементе этих объектов (поле ‘clock’, type = string). Мой массив имеет следующую модель:

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){

0

Решение

С usort на каждом элементе:

<?php
$fusion = array(
array(
array(
'clock' => '08:08'
),
array(
'clock' => '04:51'
)
),
array(
array(
'clock' => '11:47'
),
array(
'clock' => '04:23'
)
),
);

foreach($fusion as &$item) {
usort(
$item,
function($a, $b)
{
$dateA =  date_create_from_format('H:i', $a['clock']);
$dateB =  date_create_from_format('H:i', $b['clock']);

return ($dateA > $dateB);
}
);
}

var_dump($fusion);

Выход:

array (size=2)
0 =>
array (size=2)
0 =>
array (size=1)
'clock' => string '04:51' (length=5)
1 =>
array (size=1)
'clock' => string '08:08' (length=5)
1 => &
array (size=2)
0 =>
array (size=1)
'clock' => string '04:23' (length=5)
1 =>
array (size=1)
'clock' => string '11:47' (length=5)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]