Php 具有重复键值的arrray之和
我是这样排列的,现在我想用相同的发起人名称来计算费用的总和 用它做一个新的数组,所以这里有3个cima haves,我需要一个数组,其中,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]
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块中有一行代码时才使用它。除此之外,我从不需要识别如果。当然,这是你唯一可以使用它的时候。但是,呵呵。谢谢你的链接。当我不得不对那行代码进行注释并编写另一行代码时,我遇到了这个问题。