我有一个看起来像这样的数组: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 具有空数组,则将其视为零。
至尊宝的传说
TA贡献1789条经验 获得超10个赞
只需映射到一个函数来对内部数组求和,对前 5 个数组进行排序和切片:
$result = array_map('array_sum', $iplog);
arsort($result);
$top5 = array_slice($result, 0, 5, true);
- 2 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消