2017-08-10 8 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

'fore'ループを' 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); 

レンスを参照:

例えば、参照:

-1

私はforeachのにエラー通知

ループを削除し、追加を使用する行を追加して答えを編集します。シンプル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実際にはありません。 $結果のKeyはIDです。 – Andreas

+0

いいえ、結果の構造が目的の構造と一致しません。上記を参照。 – localheinz

0

$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