【发布时间】:2017-11-17 03:07:39
【问题描述】:
我有一个如下所示的数组:
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>";
}
用户 AbraCadaver 给出了我正在寻找的正确答案,如下所示:
for ($i = 1; $i < count($csvarray); $i++) {
array_multisort(array_column($csvarray, $i), SORT_DESC,
$csvarray, SORT_DESC);
echo "<pre>";
print_r($csvarray);
echo "</pre>";
}
【问题讨论】:
-
想要的输出是什么?
-
@u_mulder 对于这个循环,我将为我计划对每个排序进行 json 编码并通过 Web API 运行的每个排序都有一个数组。问题是组成原始数组的 CSV 将具有可变的列数量,这就是我首先需要循环的原因。我有一个按嵌套 [1] 的值对 DESC 排序的数组,然后是一个按嵌套 [2] 排序的数组,等等。
-
usort($csv, function ($a, $b) { return $a[0] <=> $b[0] ?: $a[1] <=> $b[1] ...; })- 您需要将循环(或array_reduce)放入比较函数中。
标签: php arrays loops sorting for-loop