所以我有二维数组,里面有一些数组。索引在数组中都是相同的:“id”和“cost”。在相同的“id”值上,我想对“number”值求和。 这是我的二维数组:
$array = array (
array ('id' => 2, 'cost' => 300),
array ('id' => 1, 'cost' => 200),
array ('id' => 2, 'cost' => 100),
);
我已经编写了一些代码,但它并不完全是我想要的。
$result = array ();
foreach($array as $item){
if (isset($result[$item['id']])){
$result[$item['id']] += $item['cost'];
}else{
$result[$item['id']] = $item['cost'];
}
}
var_dump($result);
会给我看这个:
array (size=2)
2 => int 400
1 => int 200
我想让它像这样给我看:
array (size=2)
0 =>
array (size=2)
'id' => int 2
'cost' => int 400
1 =>
array (size=2)
'id' => int 1
'cost' => int 200
如果key不存在,可以用数组初始化。添加
cost
(如果它已经存在)。
$array = array (
array ('id' => 2, 'cost' => 300),
array ('id' => 1, 'cost' => 200),
array ('id' => 2, 'cost' => 100),
);
$result = array ();
foreach($array as $item){
if (isset($result[$item['id']])){
//Add the cost
$result[$item['id']]["cost"] += $item['cost'];
} else {
//Init as array
$result[$item['id']] = array( "id" => $item['id'], "cost" => $item['cost'] );
}
}
这将导致:
Array
(
[2] => Array
(
[id] => 2
[cost] => 400
)
[1] => Array
(
[id] => 1
[cost] => 200
)
)
您可以使用
foreach
和array_values
来获得想要的结果
$array = array (
array ('id' => 2, 'cost' => 300),
array ('id' => 1, 'cost' => 200),
array ('id' => 2, 'cost' => 100),
);
$res = [];
foreach($array as $key => $value){
array_key_exists($value['id'], $res) ? (
$res[$value['id']]['cost'] += $value['cost']
)
:
(
$res[$value['id']] = [
'id' => $value['id'],
'cost' => $value['cost']
]
);
}
echo '<pre>';
print_r(array_values($res));
结果
Array
(
[0] => Array
(
[id] => 2
[cost] => 400
)
[1] => Array
(
[id] => 1
[cost] => 200
)
)
如果你只在遇到唯一id时将引用变量压入结果数组,你就不需要调用
array_values()
在循环后重新索引结果。
代码:(演示)
$result = [];
foreach ($array as $row) {
if (!isset($ref[$row['id']])) {
$ref[$row['id']] = $row;
$result[] = &$ref[$row['id']];
} else {
$ref[$row['id']]['cost'] += $row['cost'];
}
}
var_export($result);