【问题标题】:Sum values of the array against same SKU对相同 SKU 的数组值求和
【发布时间】:2017-10-19 07:25:43
【问题描述】:

我从一个 URL 获取总销售商品,它返回一个包含“SKU”、“日期”、“数量”和“总价”的数组。 我想根据相同的“SKU”计算总数量并存储在新数组中。 谁能告诉我如何用 PHP 语言做到这一点?

$url ="abc";                
<pre>
$post_fields = array();                     
$post_fields['EndDateUtc']=$end;
$post_fields['StartDateUtc']=$start;
$post_fields['TenantToken']=$TenantToken;
$post_fields['UserToken']= $UserToken;          
$data_string = json_encode($post_fields);               
</pre>
<pre>
$curl_header = array();
$curl_header[] = 'Content-type: application/json';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 180);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
$output = curl_exec($ch);
curl_close($ch);
$datr = json_decode($output, TRUE); 
print_r($datr);

数组输出: --------------

Array ( [SoldItems] => Array ( [0] => Array ( [SKU] => 8273-Navy-M [Date] => 2017-10-12 [Quantity] => 15 [TotalPrice] => 7685 ) [1] => Array ( [SKU] => 2879-S-B-White-3XL [Date] => 2017-10-12 [Quantity] => 2 [TotalPrice] => 298 ) [2] => Array ( [SKU] => 8273-Navy-M [Date] => 2017-10-12 [Quantity] => 2 [TotalPrice] => 298 ) [3] => Array ( [SKU] => 2262-S-A-Black-2XL [Date] => 2017-10-12 [Quantity] => 1 [TotalPrice] => 199 ) ) ) </pre> thank you so much.

【问题讨论】:

标签: php arrays


【解决方案1】:

请试试这个:

$skuTotal = [];

foreach($items['SoldItems'] as $item) {
    if(isset($skuTotal[$item['SKU']])){
        $skuTotal[$item['SKU']] += $item['Quantity'];
    }else{
        $skuTotal[$item['SKU']] = $item['Quantity'];
    }

}

foreach($skuTotal as $sku => $total) {
    echo "SKU " . $sku . " , Total " . $total." ";
}

【讨论】:

  • 我试过了,但什么也没发生。
  • 它在我这边工作,请确认你唱的是正确的变量名
  • 我已经更新了问题并包含了代码。你能再读一遍吗?
  • 您能否使用我的代码并使用 print_r($skuTotal) 向我展示结果。另外,如果您遇到任何错误,请告诉我该错误
  • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。做或者不做,不可以尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
【解决方案2】:

您应该使用类似的东西,它未经测试,可能需要一些调整以匹配您的实际情况:

$totalsBySku = [];

foreach($soldItems as $sale) {
    $totalsBySku[$sale['SKU']] += $sale['Quantity'];
}

foreach($totalsBySku as $sku => $total) {
        print "SKU " . $sku . " has a total quantity of " . $total;
}

【讨论】:

  • 关于您最新的问题更新,您必须在第一个 foreach 循环中重命名变量:foreach($datr['SoldItems'] as $sale) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多