使用foreach在PHP中对多维数组进行排序

时间:2016-08-25 13:35:34

标签: php arrays multidimensional-array

例如,我有一个名为$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
)

4 个答案:

答案 0 :(得分:3)

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

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

话虽如此,array_multisort在这里有些过分,我不确定你是否真的需要创建数组的副本。这样做会很好:

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

这会通过引用将sort应用于$slice1中的每个数组,从而订购$slice1

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

$slice = array(
    array(12,4,8,2,10),
    array(9,7,1,10,13)
    );

foreach ($slice as &$arr) {
    sort($arr);
}

print_r($slice);