2017-10-19 84 views
0

我从URL获取总销售物品,并返回包含'SKU','Date','Quantity'和'Total Price'的数组。 我想计算相同'SKU'的总数量并存储在新阵列中。 任何人都可以告诉我如何在PHP语言中做到这一点?阵列与相同SKU的总和值

$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.
+0

什么 你有没有尝试过?请添加该代码 –

+0

任何尝试呢?你尝试过一个foreach()吗? – Andreas

+0

http://php.net/manual/en/function.array-column.php http://php.net/manual/en/function.array-map.php – Osama

回答

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." "; 
} 
+0

我试过这个,但什么都没有发生。 –

+0

它的工作在我的最后,请确认你正在唱正确的变量名 –

+0

我有更新的问题,还包括代码。你能再读一遍吗? –

0

你应该有这样的事情去了,这是未经测试,可能需要一些调整,以符合您的实际场景:

$totalsBySku = []; 

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

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

我也试过这个,但没有得到正确的输出 –

+0

关于你最新的问题更新,你必须在第一个foreach循环中重命名变量: 'foreach($ datr ['SoldItems'] as $ sale)''' –

+0

谢谢你提供的解决方案也在工作! –