Array
(
[0] => Array
(
[id] => 1
[influencer_user_id] => 4
[content_data] => {"Reach":"300","Views":"320","Views through rate":"350","Shares":"350"}
)
[1] => Array
(
[id] => 2
[influencer_user_id] => 4
[content_data] => {"Reach":"100","Likes":"100","Views":"100"}
)
[2] => Array
(
[id] => 3
[influencer_user_id] => 5
[content_data] => {"Reach":"350"}
)
)
foreach($influencer_contents as $row){
$influencer_id = $row['influencer_user_id'];
}
如果在循环内influencer_user_id是相同的,我需要对content_data求和。给定的示例,有3个数组值impactr_user_id必须为4,我需要合并前两个数组(具有相同的值)并需要使数组计数为2。
我尝试过像创建临时数组一样,将相同的impactr_id推送到temp_array,如下所示,但这不起作用
if(!in_array($influencer_id, $array_temp)){
$array_temp[] = $influencer_id; }
我需要下面的输出,
Array
(
[0] => Array
(
[id] => 2
[influencer_user_id] => 4
[content_data] => {"Reach":"400","Likes":"100","Views":"100"}
)
[1] => Array
(
[id] => 3
[influencer_user_id] => 5
[content_data] => {"Reach":"350"}
)
)
这是您正在寻找的解决方案吗?
<?php
$data = [
[
"id" => 1,
"influencer_user_id" => 4,
"content_data" => '{"Reach":"300","Views":"320","Views through rate":"350","Shares":"350"}',
],
[
"id" => 2,
"influencer_user_id" => 4,
"content_data" => '{"Reach":"100","Likes":"100","Views":"100"}',
],
[
"id" => 3,
"influencer_user_id" => 5,
"content_data" => '{"Reach":"350"}',
],
];
$result = array();
// first, group the influencer_user_id
foreach ($data as $element) {
$result[$element['influencer_user_id']][] = $element;
}
// second, calculate content_data
$result = array_map(function($element){
$element = array_reduce($element, function($carry, $item){
// convert to array
$content_data = json_decode($item['content_data'], true);
// convert content_data to integer values
$content_data = array_map('intval', $content_data);
$item['content_data'] = $content_data;
if(empty($carry))
return $item;
// compute content_data sum
array_walk($item['content_data'], function(&$value, $key) use ($carry){
if(isset($carry['content_data'][$key])){
$value += $carry['content_data'][$key];
}
});
return $item;
});
// convert content_data back to json
$cdata = $element['content_data'];
$element['content_data'] = json_encode($cdata);
return $element;
}, $result);
$result = array_values($result);
print_r($result);
此输出为
Array
(
[0] => Array
(
[id] => 2
[influencer_user_id] => 4
[content_data] => {"Reach":400,"Likes":100,"Views":420}
)
[1] => Array
(
[id] => 3
[influencer_user_id] => 5
[content_data] => {"Reach":350}
)
)
这里是我的解决方案的链接:https://3v4l.org/1aETf