【问题标题】:Sort multidimensional array in PHP using foreach使用 foreach 在 PHP 中对多维数组进行排序
【发布时间】:2016-08-25 13:35:33
【问题描述】:

例如,我有一个名为 $slice 的数组,如下所示:

Array
(
    [0] => Array
        (
            [0] => 12
            [1] => 4
            [2] => 2
            [3] => 8
            [4] => 20
        )

    [1] => Array
        (
            [0] => 9
            [1] => 7
            [2] => 1
            [3] => 10
            [4] => 23
        )

)

我想对上面的数组进行排序,所以输出会是这样的:

Array
    (
        [0] => Array
            (
                [0] => 2
                [1] => 4
                [2] => 8
                [3] => 12
                [4] => 20
            )

        [1] => Array
            (
                [0] => 1
                [1] => 7
                [2] => 9
                [3] => 10
                [4] => 23
            )

    )

然后我尝试使用 foreach 和 array_multisort,当我使用 print_r 时,每个 col 的结果都是 1:

foreach ($slice1 as $col) {
    $slicesort[] = array_multisort($col);
}

output :
Array
(
    [0] => 1
    [1] => 1
)

【问题讨论】:

  • 来自文档:array_multisort() 可用于一次对多个数组进行排序,或按一维或多维对多维数组进行排序。您不是在对多维数组进行排序;您正在对多维数组的元素进行排序。

标签: php arrays multidimensional-array


【解决方案1】:

array_multisort 对数组进行排序就地,它不会返回排序后的数组。你需要像这样使用它:

foreach ($slice1 as $col) {
    array_multisort($col);
    $slicesort[] = $col;
}

话虽如此,array_multisort 在这里有点矫枉过正,我不确定您是否真的需要创建数组的副本。这样就可以了:

foreach ($slice1 as &$col) {
    sort($col);
}

这通过引用将sort 应用于$slice1 中的每个数组,从而将$slice1 排序到位。

【讨论】:

  • 它是第二个解决方案中foreach 循环之后的useful to unset($col);,因此如果稍后在脚本中使用另一个名为$col 的变量,您不会无意中覆盖数组。
【解决方案2】:

根据documentation,PHP array_multisort 用于对多个或多维数组进行排序,在您的情况下,您并不需要它。 在你的情况下你只需要sort,你可以找到文档here

$slicesort = array();
foreach ($slice1 as $col) {
    sort($col);
    $slicesort[] = $col;
}

【讨论】:

    【解决方案3】:
    $slice = array(
        array(12,4,8,2,10),
        array(9,7,1,10,13)
        );
    
    foreach ($slice as &$arr) {
        sort($arr);
    }
    
    print_r($slice);
    

    【讨论】:

      【解决方案4】:

      array_multisort 返回一个布尔值,成功为 true,否则为 false。

      以这种方式更改您的代码:

      foreach ($slice1 as $col) {
          if (array_multisort($col)) {
              $slicesort[] = $col;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多