PHP array_multisort sıralama düzgün karmaşık bir dizi kullanarak değil ise

3 Cevap php

Ben böyle bir boyutlu bir dizi var:

Array
(
    [thursday] => Array
        (
            [0] => Array
                (
                    [title] => Movie2
                    [time] => 15.30
                    [venue] => VenueA
                )

            [1] => Array
                (
                    [title] => Movie1
                    [time] => 13.00
                    [venue] => VenueB
                )
         )
)

Ben array_multisort kullanarak zaman göre sıralamak istiyorum ve ben bu gibi kullanmak bu iyi gidiyor:

foreach ($movies['thursday'] as $key => $row) {
        $time[$key]  = $row['time'];
}
array_multisort($time, SORT_ASC, $movies['thursday']);
unset($time);

Fakat bu şekilde, ben haftanın her günü için bu kodu tekrarlamak gerekiyor. Yani kullanmak istiyorum:

foreach ($movies as $movie) {
 foreach ($movie as $key => $row) {
   $time[$key]  = $row['time'];
 }
 array_multisort($time, SORT_ASC, $movie);
 unset($time);
}

Ama şimdi dizi sıralanmamış kalır. Bildiğim kadarıyla ben gördüğünüz gibi kod ikinci parça kod eski parçasına eşit işlevseldir. Ya da ben çok büyük bir kavramsal hata mı yapıyorum?

3 Cevap

Kullanarak, cevabını öğrendim while hile yok.

while($elements = each($movies)) {
 foreach($movies[$elements['key']] as $key => $row) {
   $time[$key]  = $row['time'];
 }
 array_multisort($time, SORT_ASC, $movies[$elements['key']]);
 unset($time);
}

Eğer PHP4 veya 5 çalıştırıyor musunuz? 5'e yaptığı gibi 4 yılında, bir foreach döngüsü bir başvuru yaratmaz. İkinci örnek kod çalışmıyor bu yüzden olabilir. Bu durumda eğer bunu bir for döngüsü olarak çevirebiliriz ...

for ($i = 0; $i < count($movies); $i++) {
    foreach ($movies[$i] as $key => $row) {
    $time[$key]  = $row['time'];
    }
    array_multisort($time, SORT_ASC, $movies[$i]);
    unset($time);
}

Ben benzer bir sorunu karşılaştım. Görünüşe array_multisort bazı eski sürümleri karışık değerler ile düzgün çalışmıyor. Ben tam hata ve sürümü için yaklaşık kazma, ama ben buldum nerede şu anda bana kaçar. Onu bulursam ben bu güncelleme olacak.