我有一个多维关联数组,我需要循环并收集产品特定数据。请参阅以下内容:
$rawData = array(
array(
'sku' => 'product1',
'quantity' => '3'
),
array(
'sku' => 'product2',
'quantity' => '3'
),
array(
'sku' => 'product1',
'quantity' => '2'
)
);
$collectedData = array();
for ($i = 0; $i < count($rawData); $i++) {
$collectedData += array($rawData[$i]['sku'] => $rawData[$i]['quantity']);
}
print_r($collectedData);
这输出以下内容:
Array
(
[product1] => 3
[product2] => 3
)
但我需要的是,如果sku
数组中已存在数组键$collectedData
,则表示要添加到已存在数量的数组值的数量。
所以这将是我想要的结果(因为product1
存在两次,值为2
和3
):
Array
(
[product1] => 5
[product2] => 3
)
有一种简单的方法吗?非常感谢您提前提供任何帮助。
答案 0 :(得分:1)
$collectedData = array();
foreach($rawData as $data)
{
// if already exist then add
if(isset($collectedData[$data['sku']]))
{
$collectedData[$data['sku']] += $data['quantity'];
}
// else set value
else
{
$collectedData[$data['sku']] = $data['quantity'];
}
}
print_r($collectedData);
答案 1 :(得分:1)
只需检查密钥是否可用。如果有效,则加上quantity
$rawData = array(
array(
'sku' => 'product1',
'quantity' => '3'
),
array(
'sku' => 'product2',
'quantity' => '3'
),
array(
'sku' => 'product1',
'quantity' => '2'
)
);
$collectedData = array();
for ($i = 0; $i < count($rawData); $i++) {
if(isset($collectedData[$rawData[$i]['sku']]))
$collectedData[$rawData[$i]['sku']] += $rawData[$i]['quantity'];
else
$collectedData += array($rawData[$i]['sku'] => $rawData[$i]['quantity']);
}
print_r($collectedData);
另外,我建议您使用循环来简化和不必要地使用索引
$collectedData = array();
foreach($rawData as $row){
if(isset($collectedData[$row['sku']]))
$collectedData[$row['sku']] += $row['quantity'];
else
$collectedData += array($row['sku'] => $row['quantity']);
}
print_r($collectedData);
答案 2 :(得分:1)
使用foreach
重复数组,并检查密钥是否存在 - 如果不存在,请将值设置为数量,如果存在,则将其添加到现有数量。钥匙代表产品。我们检查它是否设置以避免代码产生警告(如您所见this demo生成)。
$collectedData = array();
foreach ($rawData as $value) {
if (!isset($collectedData[$value['sku']]))
$collectedData[$value['sku']] = $value['quantity'];
else
$collectedData[$value['sku']] += $value['quantity'];
}