2012-02-03 6 views
1

私はこれのように見えるPHP配列をたくさん持っています(どうして私は自分の仕事をしています...私が言うのはEAVです... ):IDキーで複数の連想配列を効率的に組み合わせる

$firstNames = ([accountId] => 100, [firstName] => 'John' 
       [accountId] => 101, [firstName] => 'Fred'); 


$lastNames = ([accountId] => 100, [lastName] => 'Doe' 
       [accountId] => 101, [lastName] => 'Bloggs'); 


$city  = ([accountId] => 100, [city] => 'New York' 
       [accountId] => 101, [city] => 'Cambridge'); 


$country = ([accountId] => 100, [country] => 'USA' 
       [accountId] => 101, [country] => 'UK'); 

などなど

私は1つのアレイにそれらを結合する必要が

$userDetails = ([accountId] => 100, [firstName] => "John", [lastName] => "Doe", 
       [city] => "New York", [country] => "USA"); 

私の気持ちは、正しい答えはEAVのうち、これらの属性を解除し、それらをモデル化するだろうです正しくしかし、私はできません。また、DBの自己結合時に自己結合を行うことも可能ですが、例を単純化しましたが、これは実際には可能ではありません。このようにするように言われました。後に追加のフィールドが追加されました。

PHPでaccountIdをマージして1つの連想配列を作成する最も良い方法は何ですか?このネストされたforeachはそれを行う必要があります

+0

私はあなたが5 'foreachのを使用する必要があります怖いです'ループ、それを行うことができますか、コード例が必要ですか? – Vyktor

答えて

2

などの機能があり、または私はループラウンドに必要ですし、ラウンド:

$result = array(); 

foreach (array('firstNames' => 'firstName', 'lastNames' => 'lastName', 'city' => 'city', 'country' => 'country') as $srcArr => $arrKey) { 
    foreach ($$srcArr as $item) { 
    if (!isset($result[$item['accountId']])) { 
     $result[$item['accountId']] = $item; 
    } else { 
     $result[$item['accountId']][$arrKey] = $item[$arrKey]; 
    } 
    } 
} 

var_dump($result); 

See it working

+1

'$ result [$ account ['accountId']]'初期化が行方不明です。あなたは '$ userDetails'を見ています。これはうまくいかないでしょう:)あなたの答えをとり、あなたのバグを修正すればい​​いですか? ? :) – Vyktor

+0

@Vyktor固定して間違いなく動作しています。コードパッドのリンクを参照してください:-) – DaveRandom

+0

すごくおかげさまでお返事ありがとうございます。 –

関連する問題