【问题标题】:array group by and count php数组分组和计数php
【发布时间】:2019-03-31 17:38:23
【问题描述】:

我有 2 个日志文件,我读取并以数组形式获取内容。 我得到的数组是这样的:

2 => array:9 [▼
"app" => "a.log"
"context" => "local"
"level" => "error"
"level_class" => "danger"
"level_img" => "exclamation-triangle"
"date" => "2018-10-25 21:01:04"
"text" => "Class 'Arcanedev\Support\Collection' not found 
]
3 => array:9 [▼
"app" => "b.log"
"context" => "local"
"level" => "error"
"level_class" => "danger"
"level_img" => "exclamation-triangle"
"date" => "2018-10-26 16:49:07"

我需要获取每个文件的所有错误级别的计数。 例如:

a.log => "count of error level for a.log",
b.log => "count of error levels for b.log"

我试过了:

foreach($names as $filename){
            $logs = $this->getLogs($this->filepath.$filename);                
            $result = array();
            $result[ $filename ] = $logs;                
            foreach($logs as $log){
                //$result[ $log['level'] ][] = $log;
                $result[ $filename ][] = $log;
                $counts = array_map('count', $result);
            }
        }

这给了我这个结果:

array:1 [▼
   "a.log" => 20
]

感谢任何帮助。 先感谢您。 :)

【问题讨论】:

    标签: php arrays laravel-5 logging


    【解决方案1】:

    类似

       print_r(array_count_values(array_column($array, 'app')));
    

    我会对其进行测试,但您没有提供我可以使用的数组。理论上它应该可以工作。

    【讨论】:

      【解决方案2】:

      我自己解决了这个问题。我尝试了另一种方法,它似乎有效。 这是解决方案:

      foreach($names as $filename){
         $logs = $this->getLogs($this->filepath.$filename);                
         $result = array();                
         foreach($logs as $log){                    
            $result[ $log['app'] ][] = $log;
            $counts = array_map('count', $result);
         }
      }
      

      结果:

      array:2 [▼
        "b-laravel.log" => 3
        "laravel.log" => 7
       ]
      

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2020-07-10
        • 1970-01-01
        相关资源
        最近更新 更多