为了账号安全,请及时绑定邮箱和手机立即绑定

按第二级数组计数对数组进行排序

按第二级数组计数对数组进行排序

PHP
宝慕林4294392 2021-09-05 16:32:08
我有一个看起来像这样的数组:Array([172.17.0.2] => Array    (        [okok] => 1    )[172.17.0.1] => Array    (        [wp] => 3        [ojopj] => 1        [opjopj] => 1    ))我需要能够计算第二级内容,然后根据这些总数对顶级数组进行排序。因此,例如我的结果数组将如下所示:Array(  [172.17.0.2] => 1  [172.17.0.1] => 5)理想情况下,我想按降序排序并仅显示前 5 个结果。目前我的代码包括以下内容:foreach ($iplog as $ip => $arr) {    foreach ($arr as $user => $count) {        $count_desc = $count_desc + $count;    }    $output .= $count_desc;    $output .= '</span><hr style="width:100%">';}但是,这并没有考虑任何排序或将结果限制在前 5 位。根据我到目前为止的代码,我只能设想创建更多的 for 循环来构建新数组,对其进行排序等等。希望有一种更有效的方法来实现我需要的结果。
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

几行就够简单了:


$x = array_map('array_sum', $iplog); // sum the values

arsort($x, SORT_NUMERIC); // reverse sort

$y = array_slice($x, 0, 5, true); // top 5

重要的是,这些转换中的每一个都保留了密钥。在 PHP 中,有些数组函数可以保存键,有些函数则不能。意识到这一点可以避免一些悲伤。


旁注,如果 IP 具有空数组,则将其视为零。


查看完整回答
反对 回复 2021-09-05
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

只需映射到一个函数来对内部数组求和,对前 5 个数组进行排序和切片:


$result = array_map('array_sum', $iplog);

arsort($result);

$top5 = array_slice($result, 0, 5, true);


查看完整回答
反对 回复 2021-09-05
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信