将PHP数组排序为新数组

时间:2017-06-14 19:56:42

标签: php arrays loops sorting for-loop

我有一个如下所示的数组:

<span class="ext-link"> [[Media:MyFile.pdf|My Link Text]] </span>

我的目标是按每个嵌套数组对这个数组进行排序,这意味着我想要按每个[1]的值对数组进行排序,然后按每个[2]的值进行排序等。我当前的代码是下面,我可以理解为什么它没有提供我想要的结果。每次循环通过时,它都会覆盖$ csvarray,我只得到同一个数的倍数。

我想将每个已排序的数组放入其自己的数组中,以便稍后在HTML表中显示它们。我尝试使用$ i设置变量,但没有成功。

Array
(
    [0] => Array
        (
            [0] => A
            [1] => -1
            [2] => -1
        )

    [1] => Array
        (
            [0] => B
            [1] => 0
            [2] => 1
        )

    [2] => Array
        (
            [0] => C
            [1] => -1
            [2] => 0
        )

)

用户AbraCadaver通过以下方式为我提供了正确的答案:

for ($i = 1; $i < count($csvarray); $i++) {
    uasort($csvarray, function($a, $b) {
        return $b[$i] <=> $a[$i];
    });

    echo "<pre>";
    print_r($csvarray);
    echo "</pre>"; 

}

1 个答案:

答案 0 :(得分:0)

我只是提取这些列,对它们进行排序,然后对原始列进行排序:

array_multisort(array_column($csvarray, 1), SORT_DESC,
                array_column($csvarray, 2), SORT_DESC,
                $csvarray, SORT_DESC);

如果您想要SORT_ASC(升序),那么您可以完全省略这些参数,因为这是默认值。

对于动态数量的列,您可以尝试:

foreach($csvarray as $row) {
    array_shift($row);
    $values[] = implode('|', $row);
}
array_multisort($values, $csvarray);