2016-04-19 16 views
-1

は、私は次の配列構造を有する:PHPは配列とインクリメント値の配列をマージしますか?

[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 3 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

[1] => Array 
    (
     [name] => Bedste boller 
     [amount] => 15 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

[2] => Array 
    (
     [name] => Grov boller 
     [amount] => 15 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

私はこれらの配列の複数を持っている、と私は量だけのKEYでそれらを統合したいと思います。私はこれを手動で通過することができ

明らか
[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 5 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

、しかし、私はPHPを利用することができる期待していた:

[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 2 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

と私はそれをマージし、それはこのことを示すだろう:それは私がこれを含む別の配列を持っている場合を意味し何らかの形で機能をマージしますが、それについてどうやって行くのかはわかりません。

ありがとうございました!

*編集* 1 私はちょうどarray_merge機能を実行する場合、それは単にすべて一緒にそれを追加し、私は行くから:へ

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 
[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 2 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

しかし、私がしたいです:

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

[0] =>アレイ ( [名] => Spinatボラー [量] => 5 [カテゴリ] =>BløddejOGボラー [unit_amount] => 15 )量は現在5(他の配列がどのよう

お知らせ2と3を持っていた)。他のすべては同じで一致しますが、金額は加算され増分されます。

+1

'array_merge'機能が動作しないこの機能アプローチの結果は次のようになりますか?例えば、$ res = array_merge($ array1、$ array2、$ array3 ...などのparams配列) ' – Naumov

+0

はunit_amountです。&php.net/manual/ru/function.array-merge.phpは、カテゴリは常に同じ名前で修正されますか? –

+0

名前を見て、金額を増やしたいと思います。だから私は2つの同じ名前を持っている場合、それはまた、彼らはまた一致するので、金額だけをインクリメントし、他のすべての葉を残します。異なる可能性のある金額を除いてすべてが一致しますので、単位金額とカテゴリは常に同じ名前です(名前は一意です)。 –

答えて

0

私はそれを単一の式で行うことが可能かどうかを考えました。

多くの機能を組み合わせる必要がありますが、手動反復と同じ動作になります。それを行うことができますが、私は保守上の理由から、最高になり、反復的なアプローチにこだわっ

$result = array_values(
    array_merge(
     ...array_reverse(
      array_map(function ($arr) { 
       return array_combine(
        array_column($arr, 'name'), 
        array_values($arr) 
       ); 
      }, [$arr1, $arr2, $arr3]) 
     ) 
    ) 
); 

$tmp = []; 

foreach ($arrays as $arr) { 
    foreach ($arr as $elem) { 
     if (!isset($tmp[$elem['name']])) { 
      $tmp[$elem['name']] = $elem; 
     } 
    } 
} 

$result = array_values($tmp); 
関連する問題