我的数组如下所示。我想为用户提供一些聊天功能。
并且还要从状态
计算低于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
)
)
从这个数组我想用userwise进行sum chatduration。 bhavin用户和lokesh用户的总和应存储在数组中。
这怎么可能?
答案 0 :(得分:1)
喜欢这样吗?
$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
)
)
答案 1 :(得分:0)
您可以将聊天时间总和如下:
$duration = array_sum(array_column($userArray,'chatduration'));
你可以得到这样的计数:
$counts = array_count_values(array_column($userArray,'status'));
最后一个将返回一个数组,使用数组的值作为键,并将它们在数组中的频率作为值。
答案 2 :(得分:0)
我编写了一个算法,用户计算总聊天时间,请参阅演示,这里是代码
$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
)
答案 3 :(得分:0)
您可以在这样的foreach循环中使用array_column,array_count_values和array_sum来获取我认为易于使用的结果数组。
注意我是如何首先创建输入数组的关联数组,以便更容易创建结果数组 关联数组意味着我将获得[user] [index] [status]。例如 这样我就可以轻松地使用array_sum和array_count_values来获得我需要的东西。
$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
}
}