Php数组在foreach中找到相同的值

问题描述 投票:0回答:1
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 arrays foreach
1个回答
0
投票

这是您正在寻找的解决方案吗?

<?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

© www.soinside.com 2019 - 2024. All rights reserved.