PHP循环 - 如果密钥存在,则对数组的值求和

时间:2017-08-26 12:13:29

标签: php arrays

我有一个多维关联数组,我需要循环并收集产品特定数据。请参阅以下内容:

$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存在两次,值为23):

Array
(
    [product1] => 5
    [product2] => 3
)

有一种简单的方法吗?非常感谢您提前提供任何帮助。

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);

DEMO

答案 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'];
}