我有以下数组,我试图合并具有shelf
和weight
值的元素,并将piece
键的值求和。
Array
(
[0] => Array
(
[shelf] => Left
[weight] => 10.000
[piece] => 1
)
[1] => Array
(
[shelf] => Right
[weight] => 04.000
[piece] => 12
)
[2] => Array
(
[shelf] => Right
[weight] => 04.000
[piece] => 4
)
[3] => Array
(
[shelf] => Right
[weight] => 07.000
[piece] => 8
)
)
目前,我通过创建具有以下字段shelf
, weight
和piece
的临时表并插入所有四个值并在PHP中使用以下选择查询解析结果
SELECT shelf, weight, SUM(piece) FROM temp GROUP BY CONCAT(shelf, weight)
Array
(
[0] => Array
(
[shelf] => Left
[weight] => 10.000
[piece] => 1
)
[1] => Array
(
[shelf] => Right
[weight] => 04.000
[piece] => 16
)
[3] => Array
(
[shelf] => Right
[weight] => 07.000
[piece] => 8
)
)
然而,我相信这可以简单地通过PHP实现,但不能得到我的头。谁能指出我可能遗漏了什么?
给版主和SO Vigilante的说明
请不要把它个人化,但在标记或甚至说这是重复的之前,请彻底阅读我的问题并理解我想要达到的目的,只有在你同意的情况下,请详细解释为什么你认为它是重复的,而不是简单地根据类似标题的问题争论
我已经经历了这些问题,但它们在我的场景中不起作用,因为它们试图根据一个特定的元素合并数组和求和值,通常是ID,但在我的情况下,它的唯一性是根据元素的组合来判断的(不是一个)
1,2,3
如果你必须在PHP中这样做,那么像这样:
$data = array(
array(
'shelf' => 'Left',
'weight' => '10.000',
'piece' => 1,
),
array(
'shelf' => 'Right',
'weight' => '04.000',
'piece' => 12,
),
array(
'shelf' => 'Right',
'weight' => '04.000',
'piece' => 4,
),
array(
'shelf' => 'Right',
'weight' => '07.000',
'piece' => 8,
),
);
$newData = array();
$result = array_reduce(
$data,
function($newData, $value) {
$key = $value['shelf'].$value['weight'];
if (!isset($newData[$key])) {
$newData[$key] = $value;
} else {
$newData[$key]['piece'] += $value['piece'];
}
return $newData;
},
$newData
);
var_dump($result);
将工作,但我真的相信,你的整个方法是为自己制造主要的性能问题