[英]PHP - How can I sort this multi dimensional array by sum value?
How can I sort this array by the sum value of each set in the deepest nested array?如何按最深嵌套数组中每个集合的总和值对这个数组进行排序?
$arr = Array(
Array(
'I am the first string.',
Array(
Array( 'round', 1, 1 ),
Array( 'rhythm', 1, 1 )
)
),
Array(
'I am the second string',
Array(
Array( 'cps', 1, 1 ),
Array( 'Hz', 1, 3 ),
Array( 'hertz', 1, 1 )
)
),
Array(
'I am the third string.',
Array(
Array( 'uucps', 1, 1 ),
Array( 'uuHz', 1, 2 ),
Array( 'uuhertz', 1, 1 )
)
)
);
I need to sort the second dimension of arrays by the sum value of third key of the deepest set(third dimension).我需要按最深集合(第三维)的第三个键的总和值对数组的第二维进行排序。
So the end result will look like this:所以最终结果将是这样的:
$arr = Array(
Array(
'I am the second string',
Array(
Array( 'cps', 1, 1 ),
Array( 'Hz', 1, 3 ),
Array( 'hertz', 1, 1 )
)
),
Array(
'I am the third string.',
Array(
Array( 'uucps', 1, 1 ),
Array( 'uuHz', 1, 2 ),
Array( 'uuhertz', 1, 1 )
)
),
Array(
'I am the first string.',
Array(
Array( 'round', 1, 1 ),
Array( 'rhythm', 1, 1 )
)
)
);
I know that usort might be my best bet but I can't seems to make it work for my use case.我知道 usort 可能是我最好的选择,但我似乎无法让它适用于我的用例。
The solution using usort
, array_sum
and array_column
functions:使用
usort
、 array_sum
和array_column
函数的解决方案:
usort($arr, function($a, $b){
$prev = array_sum(array_column($a[1], 2)); // summing up values for each third key (2)
$next = array_sum(array_column($b[1], 2));
return $next - $prev;
});
print_r($arr);
The output:输出:
Array
(
[0] => Array
(
[0] => I am the second string
[1] => Array
(
[0] => Array
(
[0] => cps
[1] => 1
[2] => 1
)
[1] => Array
(
[0] => Hz
[1] => 1
[2] => 3
)
[2] => Array
(
[0] => hertz
[1] => 1
[2] => 1
)
)
)
[1] => Array
(
[0] => I am the third string.
[1] => Array
(
[0] => Array
(
[0] => uucps
[1] => 1
[2] => 1
)
[1] => Array
(
[0] => uuHz
[1] => 1
[2] => 2
)
[2] => Array
(
[0] => uuhertz
[1] => 1
[2] => 1
)
)
)
[2] => Array
(
[0] => I am the first string.
[1] => Array
(
[0] => Array
(
[0] => round
[1] => 1
[2] => 1
)
[1] => Array
(
[0] => rhythm
[1] => 1
[2] => 1
)
)
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.