【问题标题】:PHP array_multisort does not sort properly while using complex arrayPHP array_multisort 在使用复杂数组时无法正确排序
【发布时间】:2010-01-04 23:40:11
【问题描述】:

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

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);
}

但现在数组仍然未排序。据我所见,后一段代码的功能与前一段代码相同。还是我犯了一个巨大的概念错误?

【问题讨论】:

    标签: php multidimensional-array sorting


    【解决方案1】:

    您运行的是 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);
    }
    

    【讨论】:

    • 正在运行 PHP4,这说明了一些事情。但是,您的解决方案不起作用,因为您无法引用 assoc 中的项目。具有数字索引的数组(例如 array['value'] != array[0])
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题。显然,某些较旧版本的 array_multisort 不能正确处理混合值。我一直在寻找确切的错误和版本,但现在我发现它的地方让我无法理解。如果我找到它,我会更新它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        相关资源
        最近更新 更多