【问题标题】:Unable to add the values of the same array in php?无法在php中添加相同数组的值?
【发布时间】:2018-05-22 06:37:06
【问题描述】:

我有一个包含数组的以下数据。我想要做的是将visitor_cv 值加在一起,如果 visitor_day、visitor_id 和类型是一样的。如果您在下面看到以下代码,就好像数组 6 和 13 具有相同的数据,而 23 和 36 也具有相同的数据。我想简单地将visitor_cs 的值添​​加为2。但我不知道我将如何做到这一点。我很想听听你的意见!

Array
(
    [6] => Array
        (
            [type] => mail
            [visitor_id] => 4
            [visitor_day] => 20180516
            [visitor_cv] => 1
        )

    [13] => Array
        (
            [type] => mail
            [visitor_id] => 4
            [visitor_day] => 20180516
            [visitor_cv] => 1
        )

    [23] => Array
        (
            [type] => skype
            [visitor_id] => 4
            [visitor_day] => 20180516
            [visitor_cv] => 1
        )

    [36] => Array
        (
            [type] => skype
            [visitor_id] => 4
            [visitor_day] => 20180516
            [visitor_cv] => 1
        )

我希望上面的结果是这样的

 Array
(
    [type] => mail
    [visitor_id] => 4
    [visitor_day] => 20180516
    [visitor_cv] => 2
)


 Array
(
    [type] => skype
    [visitor_id] => 4
    [visitor_day] => 20180516
    [visitor_cv] => 2
)

【问题讨论】:

  • 您的数据来源是什么?例如,如果是数据库,您可以“分组依据”。如果您不确定,我建议您从简单的 for/foreach 循环开始,然后手动排序并添加到最终数组中。

标签: php arrays logic


【解决方案1】:

执行此操作的一个选项可能是基于typevisitor_idvisitor_day 创建一个数组键,然后对visitor_cv 求和:

$items = [
    ["type" => "mail", "visitor_id" => 4 ,"visitor_day" => 20180516, "visitor_cv" => 1],
    ["type" => "mail", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1],
    ["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516,"visitor_cv" => 1],
    ["type" => "skype", "visitor_id" => 4, "visitor_day" => 20180516, "visitor_cv" => 1]
];

$result = [];

foreach ($items as $item) {
    $key = $item["type"] . $item["visitor_id"] . $item["visitor_day"];
    if (!array_key_exists($key, $result)) {
        $result[$key] = $item;
        continue;
    }
    $result[$key]["visitor_cv"] += $item["visitor_cv"];
}

Demo

【讨论】:

    【解决方案2】:

    我创建了这个函数,它需要一个数组数组和你想要检查的键作为一个数组, 然后它通过连接键值创建一个值并将它们放入一个数组中以稍后检查它是否存在,如果它存在则跳过否则它将值放入名为 tempArray 的结果数组中,然后将其作为结果返回

    function arrayUnique($array, $keys) { 
        $tempArray = []; 
        $keyArray = []; 
    
        foreach($array as $val) { 
            $keysValue = '';
            foreach($keys as $key) {
                $keysValue .= $val[$key];
            }
    
            if(!in_array($keysValue, $keyArray)) {
                $keyArray[] = $keysValue;
                $tempArray[] = $val;
            }
        } 
    
        return $tempArray; 
    } 
    
    
    $a = [
        ['name' => 'hassan', 'age' => 2, 'test' => 1],
        ['name' => 'hassan', 'age' => 1, 'test' => 1],
        ['name' => 'ali', 'age' => 2, 'test' => 1]
    ];
    var_dump(arrayUnique($a, ['age', 'test']));
    

    Demo

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2016-06-30
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多