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

我有一个看起来像这样的数组:


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 循环来构建新数组,对其进行排序等等。


希望有一种更有效的方法来实现我需要的结果。


宝慕林4294392
浏览 118回答 2
2回答

千巷猫影

几行就够简单了:$x = array_map('array_sum', $iplog); // sum the valuesarsort($x, SORT_NUMERIC); // reverse sort$y = array_slice($x, 0, 5, true); // top 5重要的是,这些转换中的每一个都保留了密钥。在 PHP 中,有些数组函数可以保存键,有些函数则不能。意识到这一点可以避免一些悲伤。旁注,如果 IP 具有空数组,则将其视为零。

至尊宝的传说

只需映射到一个函数来对内部数组求和,对前 5 个数组进行排序和切片:$result = array_map('array_sum', $iplog);arsort($result);$top5 = array_slice($result, 0, 5, true);
打开App,查看更多内容
随时随地看视频慕课网APP