使用复杂数组时,PHP array_multisort无法正确排序

时间:2010-01-04 23:40:11

标签: php multidimensional-array sorting

我有一个像这样的多维数组:

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 个答案:

答案 0 :(得分:2)

您运行的是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 :(得分:1)

找到答案,使用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);
}

答案 2 :(得分:0)

我遇到了类似的问题。显然,某些旧版本的array_multisort无法正常使用混合值。我正在挖掘确切的错误和版本,但我发现它现在逃脱了我。如果我找到它,我会更新。