2017-08-10 35 views
0

我有如下一個多維數組總和鍵值:如何同時匹配在PHP多維數組的另一個關鍵值

array 
(
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000), 
    3 => array("id" => 5, "price" => 1000), 
    4 => array("id" => 4, "price" => 0), 
    5 => array("id" => 5, "price" => 0) 
) 

而想要合成陣列象下面這樣:

array 
(
    0 => array("id" => 4, "price" => 1500), 
    1 => array("id" => 5, "price" => 2000), 
) 

是那些價格匹配id的總和,例如。 id = 4價格將是結果數組中的(1000 + 500 + 0)之和。

如何在PHP中得到結果數組?

+1

帶循環?你有什麼試過的? –

+0

使用'foreach'循環與'if'語句一起使用? –

+0

我試過了,但沒有得到預期的結果。 –

回答

0

使用此:

$aggregated = []; 

foreach ($rows as $row) { 
    $id = $row['id']; 
    $price = $row['price']; 

    if (!array_key_exists($id, $aggregated)) { 
     $aggregated[$id] = [ 
      'id' => $id, 
      'price' => $price, 
     ]; 

     continue; 
    } 

    $aggregated[$id]['price'] += $price; 
} 

$result = array_values($aggregated); 

對於裁判erence,參見:

有關示例,請參見:

-1

我編輯答案補充一條線,將刪除錯誤通知

循環用foreach和使用加法。

$arr = array 
(
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000), 
    3 => array("id" => 5, "price" => 1000), 
    4 => array("id" => 4, "price" => 0), 
    5 => array("id" => 5, "price" => 0) 
); 

$result = array(); 
foreach($arr as $val){ 
    if(!isset($result[$val["id"]])) $result[$val["id"]] =0; 
    $result[$val["id"]] += $val["price"]; 
} 

var_dump($result); 

https://3v4l.org/2D5Ei

+0

這是缺少標識符,按要求。 – localheinz

+0

@localheinz不是。 $結果的密鑰是ID。 – Andreas

+0

不,結果的結構與期望的結構不匹配。往上看。 – localheinz

0

有了簡單foreach

$arr = array 
    (
    0 => array("id" => 4, "price" => 1000), 
    1 => array("id" => 4, "price" => 500), 
    2 => array("id" => 5, "price" => 1000), 
    3 => array("id" => 5, "price" => 1000), 
    4 => array("id" => 4, "price" => 0), 
    5 => array("id" => 5, "price" => 0) 
); 

$sum = []; 
foreach ($arr as $value) { 
    extract($value); 
    $sum[$id]['id'] = $id; 
    if (array_key_exists($id, $sum)) { 
     $sum[$id]['price'] = $price; 
    } else { 
     $sum[$id]['price'] += $price; 
    } 
} 

print_r(array_values($sum)); 

Demo

相關問題