Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组中的用户明智计数_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 多维数组中的用户明智计数

Php 多维数组中的用户明智计数,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的数组如下所示。我想为userwise计算聊天持续时间的总和 并且还希望从状态中统计到3个以下的详细信息 结束聊天 开放式聊天 总聊天 Array ( [0] => Array ( [id] => pZgauDZtvQ9grRD9c [rid] => obHEGwnrfHKCd32jF [starttime] => 14-02-2

我的数组如下所示。我想为userwise计算聊天持续时间的总和

并且还希望从状态中统计到3个以下的详细信息

  • 结束聊天
  • 开放式聊天
  • 总聊天

    Array
        (
           [0] => Array
                (
                    [id] => pZgauDZtvQ9grRD9c
                    [rid] => obHEGwnrfHKCd32jF
                    [starttime] => 14-02-2018
                    [chatduration] => 124.502
                    [username] => bhavin
                    [status] => open
                )
    
            [1] => Array
                (
                    [id] => ej5WfYe3dn8mtHzQF
                    [rid] => o6pKCt4e6RaYiZhQ8
                    [starttime] => 14-02-2018
                    [chatduration] => 1072.628
                    [username] => bhavin
                    [status] => closed
                )                                                        
    
            [2] => Array
                (
                    [id] => qCzZjf7vb4rSBRndk
                    [rid] => ZFvuuFiL9RFiemX3K
                    [starttime] => 14-02-2018
                    [chatduration] => 11.254
                    [username] => lokesh
                    [status] => closed
                )
    
            [3] => Array
                (
                    [id] => TCdSycFFSeY8WaKzG
                    [rid] => f7ADPWFsCD6RZFspk
                    [starttime] => 14-02-2018
                    [chatduration] => 121.228
                    [username] => lokesh
                    [status] => closed
                )
    
        )
    
    从这个数组中,我想从用户角度求和。 bhavin用户和lokesh用户的总和应存储在数组中


  • 这怎么可能呢?

    您可以这样计算聊天持续时间:

    $duration = array_sum(array_column($userArray,'chatduration'));
    
    $counts = array_count_values(array_column($userArray,'status'));
    
    您可以这样获得您的计数:

    $duration = array_sum(array_column($userArray,'chatduration'));
    
    $counts = array_count_values(array_column($userArray,'status'));
    

    最后一个将返回一个数组,使用数组中的值作为键,它们在数组中的频率作为值

    像这样吗?

    $array = unserialize( 'a:4:{i:0;a:6:{s:2:"id";s:17:"pZgauDZtvQ9grRD9c";s:3:"rid";s:17:"obHEGwnrfHKCd32jF";s:9:"starttime";s:10:"14-02-2018";s:12:"chatduration";s:7:"124.502";s:8:"username";s:6:"bhavin";s:6:"status";s:4:"open";}i:1;a:6:{s:2:"id";s:17:"ej5WfYe3dn8mtHzQF";s:3:"rid";s:17:"o6pKCt4e6RaYiZhQ8";s:9:"starttime";s:10:"14-02-2018";s:12:"chatduration";s:8:"1072.628";s:8:"username";s:6:"bhavin";s:6:"status";s:6:"closed";}i:2;a:6:{s:2:"id";s:17:"qCzZjf7vb4rSBRndk";s:3:"rid";s:17:"ZFvuuFiL9RFiemX3K";s:9:"starttime";s:10:"14-02-2018";s:12:"chatduration";s:6:"11.254";s:8:"username";s:6:"lokesh";s:6:"status";s:6:"closed";}i:3;a:6:{s:2:"id";s:17:"TCdSycFFSeY8WaKzG";s:3:"rid";s:17:"f7ADPWFsCD6RZFspk";s:9:"starttime";s:10:"14-02-2018";s:12:"chatduration";s:7:"121.228";s:8:"username";s:6:"lokesh";s:6:"status";s:6:"closed";}}' );
    
    
    $new_array['open_chats'] = $new_array['closed_chats'] = $new_array['total_chats'] = 0;
    
    foreach( $array as $chat ){
    
        if( $chat['status']  === 'open')
    
            $new_array['open_chats']++;
    
        if( $chat['status'] === 'closed' )
    
            $new_array['closed_chats']++;
    
    
        @$new_array['chat_duration_by_user'][ $chat['username'] ] += $chat['chatduration'];
    
        $new_array['total_chats']++;
    
    }
    
    
    print_r( $new_array );
    
    输出

    Array
    (
        [total_chats] => 4
        [closed_chats] => 3
        [open_chats] => 1
        [chat_duration_by_user] => Array
            (
                [bhavin] => 1197.13
                [lokesh] => 132.482
            )
    
    )
    

    我已经写了一个算法,计算总聊天时间的用户明智的,请看演示,这里是代码

    $user = [];
    
    foreach($arr as $record){
    
        if (array_key_exists($record['username'],$user))
      {
            $user[$record['username']] = $user[$record['username']] + $record['chatduration'];
            echo "inside";
      }
    else
      {
          $user[$record['username']]  = $record['chatduration'];
      }
    }
    
    输出:

    Array(
    [bhavin] => 249.004
     )
    
    您可以使用,并在这样的foreach循环中获得一个我认为易于使用的结果数组

    请注意,我是如何首先为您的输入数组创建一个关联数组,以便更容易地创建结果数组的。
    关联数组意味着我将获得[user][index][status]例如。
    这样我就可以很容易地使用array\u sum和array\u count\u值来获得我所需要的

    $arr = Array(
       "0" => Array
            (
                "id" => "pZgauDZtvQ9grRD9c",
                "rid" => "obHEGwnrfHKCd32jF",
                "starttime" => "14-02-2018",
                "chatduration" => 124.502,
                "username" => "bhavin",
                "status" => "open"
            ),
    
        "1" => Array
            (
                "id" => "ej5WfYe3dn8mtHzQF",
                "rid" => "o6pKCt4e6RaYiZhQ8",
                "starttime" => "14-02-2018",
                "chatduration" => 1072.628,
                "username" => "bhavin",
                "status" => "closed"
            ),                                                        
    
        "2" => Array
            (
                "id" => "qCzZjf7vb4rSBRndk",
                "rid" => "ZFvuuFiL9RFiemX3K",
                "starttime" => "14-02-2018",
                "chatduration" => 11.254,
                "username" => "lokesh",
                "status" => "closed"
            ),
    
        "3" => Array
            (
                "id" => "TCdSycFFSeY8WaKzG",
                "rid" => "f7ADPWFsCD6RZFspk",
                "starttime" => "14-02-2018",
                "chatduration" => 121.228,
                "username" => "lokesh",
                "status" => "closed"
            )
    );
    // create new associative array
    foreach($arr as $subarr){ 
        $new[$subarr["username"]][] = $subarr; 
    }
    // loop each username and create result array 
    foreach($new as $user => $subarr){
        $result[$user]["duration"] = array_sum(array_column($subarr, "chatduration")); 
        // @ to supress notice if no open/closed is in array
        @$result[$user]["open"] = array_count_values(array_column($subarr, "status"))["open"]; 
        @$result[$user]["closed"] = array_count_values(array_column($subarr, "status"))["closed"];
    }
    $result["total"]["duration"] = array_sum(array_column($result, "duration"));
    $result["total"]["open"] = array_sum(array_column($result, "open"));
    $result["total"]["closed"] = array_sum(array_column($result, "closed"));
    var_dump($result);
    

    本报告的产出:

    array(3) {
          ["bhavin"]=> array(3) {
                ["duration"]=> 1197.13
                ["open"]=> 1
                ["closed"]=> 1
          }
          ["lokesh"]=> array(3) {
                ["duration"]=> 132.482
                ["open"]=> NULL
                ["closed"]=> 2
          }
          ["total"]=> array(3) {
                ["duration"]=> 1329.612
                ["open"]=> 1
                ["closed"] => 3
          }
    }
    

    迭代数组和求和值,不是吗?你能分享你需要的输出吗?答案都不对吗?也许你可以澄清你需要什么,我们可以调整我们的答案。