Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有重复键值的arrray之和_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 具有重复键值的arrray之和

Php 具有重复键值的arrray之和,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我是这样排列的,现在我想用相同的发起人名称来计算费用的总和 用它做一个新的数组,所以这里有3个cima haves,我需要一个数组,其中,fee\u potetial是所有其他发起人是cima haves的数组的总和 $formEntries返回如下值: Array ( [0] => Array ( [entry_id] => 54 [0] => 1 [fee_potential]

我是这样排列的,现在我想用相同的发起人名称来计算费用的总和

用它做一个新的数组,所以这里有3个cima haves,我需要一个数组,其中,
fee\u potetial
是所有其他发起人是cima haves的数组的总和

$formEntries
返回如下值:

Array
(
    [0] => Array
        (
            [entry_id] => 54
            [0] => 1
            [fee_potential] => 100
            [originator] => cima haves

        )

    [1] => Array
        (
            [entry_id] => 55
            [0] => 1
            [fee_potential] => 600
            [originator] => steve

        )

    [2] => Array
        (
            [entry_id] => 56
            [0] => 1
            [fee_potential] => 500
            [originator] => cima haves

        )

    [3] => Array
        (
            [entry_id] => 57
            [0] => 1
            [fee_potential] => 500
            [originator] =>  cima haves

        )

)
以下是我试图隔离的代码:

$originator = array_column($formEntries, 'originator');
$originator = array_unique($originator);
$array_filter = array_filter($formEntries, function ($key, $value) use ($originator) {
    return in_array($value, array_keys($originator));
}, ARRAY_FILTER_USE_BOTH);
我需要输出[费用潜力]=>1100是总和

Array
    (
        [0] => Array
            (
                [entry_id] => 54
                [0] => 1
                [fee_potential] => 1100
                [originator] => cima haves

            )

        [1] => Array
            (
                [entry_id] => 55
                [0] => 1
                [fee_potential] => 600
                [originator] => steve

            )
    )

一个简单的foreach循环可以非常简单地完成这项工作

$totals = [];

foreach( $formEntries as $entry) {
    if( isset($totals[$entry['originator']]){
        $totals[$entry['originator']]['fee_potential'] += $entry['fee_potential'];
    } else {
        $totals[$entry['originator']]['fee_potential'] = $entry['fee_potential'];
    }
}

试着像这样遍历所有元素

$final_arr = array();
foreach($formEntries as $value){
    if(isset($final_arr[$value['originator']])){
        $final_arr[$value['originator']]['fee_potential'] += $value['fee_potential'];
    }
    else{
        $final_arr[$value['originator']] = $value;
    }

}

它将检查最后一个数组中是否已经存在
发起人。如果它这样做,它将对值求和,否则它将分配该数组以及
费用势

试试这段代码,它运行良好

$result = array();
foreach($formEntries as $key => $v){
   if(in_array($v['originator'], array_column($result, 'originator'))){
      $result[array_search($v['originator'], array_column($result, 'originator'))]['fee_potential'] += $v['fee_potential'];
   }else{
      $result[$key] = $v;
   }
}
结果:-

Array
(
    [0] => Array
        (
            [entry_id] => 54
            [0] => 1
            [fee_potential] => 1100
            [originator] => cima haves

        )

    [1] => Array
        (
            [entry_id] => 55
            [0] => 1
            [fee_potential] => 600
            [originator] => steve

        )
)

那么你的代码生成了什么输出呢?它只是找到了唯一的数组,但没有给我潜在的费用总和。你真的想在结果数组中添加
entry\u id
[0]
。如果你需要按发起者“分组”并“汇总”该标准的所有潜在费用,你应该使用array\u reduce来代替:我真的不在乎入门id和0好的解决方案(我们的想法基本上是一样的)。然而,它不会包含
entry\u id
0
的值。哈似乎
伟人所见略同
,但OP在评论中说他对这些字段不感兴趣。错过了那个评论。不太喜欢不带支架的IF语句。如果你需要在查找和替换类的全局编辑器中识别if,那真是一件痛苦的事情。我只在if块中有一行代码时才使用它。除此之外,我从不需要识别如果。当然,这是你唯一可以使用它的时候。但是,呵呵。谢谢你的链接。当我不得不对那行代码进行注释并编写另一行代码时,我遇到了这个问题。