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