0

可能重复:
如何在 php 中对多维数组进行排序

我需要排序和合并一个复杂的数组!数组是多维的,子数组使用 2 个键/值,如下所示:

<?php
$result = array(
array("1", "20"),
array("1", "33"),
array("2", "10"),
array("2", "25"),
array("2", "7"),
array("3", "33"),
array("3", "80"),
array("4", "300")
);
print_r($result);
?>

现在我需要根据键 [1] 值(在子数组中)的聚合对其进行排序,其中键 [0] 的值相似并合并,然后将其从多到少排序!例如在上面我喜欢结果是:

Array
(
    [0] => Array
        (
            [0] => 4
            [1] => 300
        )

    [1] => Array
        (
            [0] => 3
            [1] => 113
        )

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

    [3] => Array
        (
            [0] => 2
            [1] => 42
        )

)

我希望我的解释足够清楚。

4

2 回答 2

1

这里的关键是array_multisort函数,但它需要一些工作才能以正确的格式获取输入。看看下面的代码。首先我们累积值,然后将其拆分为索引数组和值数组,使用多重排序对其进行排序并将其合并在一起。

$result2 = array();
foreach($result as $pair) {
    if  (!isset($result2[$pair[0]]))
        $result2[$pair[0]] = 0;
    $result2[$pair[0]] += $pair[1];
}
$array1 = array();
$array2 = array();
foreach($result2 as $key => $value) {
    array_push($array1, $key);
    array_push($array2, $value);
}
array_multisort($array2, SORT_DESC, $array1);
$result3 = array();
for ($i = 0; $i < count($array1); $i++) {
    array_push($result3, array($array1[$i], $array2[$i]));
}
print_r($result3);
于 2012-10-16T21:43:54.923 回答
0

在您的特定情况下,您可以将两个操作(汇总和,创建排序数组)压缩为一次迭代。

但是代码变得难以阅读:

list($sort, $result) = array_reduce($result, function($a, $v) {
    $a[1][$v[0]] = [$v[0], (@$a[0][$v[0]] += $v[1])];
    return $a;
}, []);

array_multisort($sort, SORT_NUMERIC, SORT_DESC, $result);
于 2012-10-16T22:09:45.643 回答