PHP array_multisort не сортируется должным образом при использовании сложного массива - PullRequest
0 голосов
/ 05 января 2010

У меня есть многомерный массив, подобный этому:

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

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

Я хочу отсортировать его по времени, используя array_multisort, и это нормально, когда я использую его так:

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

Но таким образом я должен повторять этот код для каждого дня недели. Поэтому я хотел бы использовать:

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

Но теперь массив остается несортированным. Насколько я вижу, последний кусок кода функционирует так же, как и предыдущий кусок кода. Или я совершаю огромную концептуальную ошибку?

Ответы [ 3 ]

2 голосов
/ 05 января 2010

Вы используете PHP4 или 5? В 4 цикл foreach не создает ссылку, как в 5. Это может быть причиной того, что ваш второй пример кода не работает. Если это так, вы можете преобразовать его в цикл for ...

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);
}
1 голос
/ 05 января 2010

Узнал ответ, используя while, добился цели.

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);
}
0 голосов
/ 05 января 2010

Я столкнулся с подобной проблемой. Очевидно, некоторые старые версии array_multisort не работают правильно со смешанными значениями. Я копался в поисках точной ошибки и версии, но там, где я ее нашел, меня сейчас ускользает. Я обновлю это, если найду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...