Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP数组排序为新数组_Php_Arrays_Loops_Sorting_For Loop - Fatal编程技术网

将PHP数组排序为新数组

将PHP数组排序为新数组,php,arrays,loops,sorting,for-loop,Php,Arrays,Loops,Sorting,For Loop,我有一个如下所示的数组: Array ( [0] => Array ( [0] => A [1] => -1 [2] => -1 ) [1] => Array ( [0] => B [1] => 0 [2] => 1 )

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

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
        )

)
我的目标是按每个嵌套数组对该数组进行排序,这意味着我希望按每个嵌套数组中[1]的值对数组进行排序,然后按每个嵌套数组中[2]的值进行排序,等等。我当前的代码如下所示,我可以理解为什么它不能提供我想要的结果。每次循环通过时,它都会覆盖$csvarray,而我只得到相同内容的倍数

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

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

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

}
for($i=1;$i
用户Abracadver给了我正确的答案,回答如下:

array_multisort(array_column($csvarray, 1), SORT_DESC,
                array_column($csvarray, 2), SORT_DESC,
                $csvarray, SORT_DESC);
for($i=1;$i
我只需提取这些列,对它们进行排序,然后对原始列进行排序:

如果希望对ASC进行排序(升序),则可以完全忽略这些参数,因为这是默认值

对于动态列数,您可以尝试以下方法:


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

如果希望对ASC进行排序(升序),则可以完全忽略这些参数,因为这是默认值

对于动态列数,您可以尝试以下方法:


所需的输出是什么?@u_mulder对于这个循环,我计划对每种排序使用一个数组进行json编码并通过web API运行。问题是,组成原始数组的CSV将具有可变的列数量,这就是我首先需要循环的原因。我有一个数组,它按嵌套[1]的值对DESC排序,然后按嵌套[2]排序,等等。
usort($csv,function($a,$b){return$a[0]$b[0]?:$a[1]$b[1]…;})
-您需要放置循环(或
array\u reduce
)在比较函数中。所需的输出是什么?@u_mulder对于这个循环,我将为我计划进行json编码并通过web API运行的每种排序设置一个数组。问题是,组成原始数组的CSV将具有可变的列数量,这就是我首先需要循环的原因。我有一个数组,按嵌套[1]的值对DESC排序,然后按嵌套[2]排序,等等。
usort($csv,function($a,$b){return$a[0]$b[0]?:$a[1]$b[1]…;})
-你需要将循环(或
array\u reduce
)放在比较函数中。我在我的原始帖子中添加了这条评论,但根据分析,我上传的CSV将有不同数量的列。在$i从1到X的循环中(无论我在该特定CSV中有多少列),这可能吗?我需要能够在最后从中提取[0]的顺序。但是你想忽略0索引吗?这实际上正是我想要的!我将结果添加到我原来的帖子中。非常感谢。我在我的原始帖子中添加了这条评论,但是我上传的CSV将根据分析结果有不同数量的列。在$i从1到X的循环中(无论我在该特定CSV中有多少列),这可能吗?我需要能够在最后从中提取[0]的顺序。但是你想忽略0索引吗?这实际上正是我想要的!我将结果添加到我原来的帖子中。非常感谢。
array_multisort(array_column($csvarray, 1), SORT_DESC,
                array_column($csvarray, 2), SORT_DESC,
                $csvarray, SORT_DESC);
foreach($csvarray as $row) {
    array_shift($row);
    $values[] = implode('|', $row);
}
array_multisort($values, $csvarray);