Php 多维数组中的用户明智计数
我的数组如下所示。我想为userwise计算聊天持续时间的总和 并且还希望从状态中统计到3个以下的详细信息Php 多维数组中的用户明智计数,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我的数组如下所示。我想为userwise计算聊天持续时间的总和 并且还希望从状态中统计到3个以下的详细信息 结束聊天 开放式聊天 总聊天 Array ( [0] => Array ( [id] => pZgauDZtvQ9grRD9c [rid] => obHEGwnrfHKCd32jF [starttime] => 14-02-2
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
}
}
迭代数组和求和值,不是吗?你能分享你需要的输出吗?答案都不对吗?也许你可以澄清你需要什么,我们可以调整我们的答案。