【问题标题】:Sorted PHP Array to New Array [duplicate]将PHP数组排序为新数组[重复]
【发布时间】: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] &lt;=&gt; $b[0] ?: $a[1] &lt;=&gt; $b[1] ...; }) - 您需要将循环(或array_reduce放入比较函数中。

标签: php arrays loops sorting for-loop


【解决方案1】:

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

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

【讨论】:

  • 我将此评论添加到我的原始帖子中,但我上传的 CSV 将根据分析具有可变数量的列。这在 $i 从 1 到 X 的循环中是否可行(但是我在那个特定的 CSV 中有多少列)?我需要能够在最后从中提取 [0] 的顺序。
  • 但是你想忽略0索引?
  • 这实际上完全符合我的要求!我将结果添加到我的原始帖子中。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多