2012-02-03 47 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'); 

等等等等

我將它們組合成一個陣列:

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

我的感覺是正確的答案應該是打破這些屬性進行EAV和它們建模正確。但我不能。也可以在數據庫中進行自連接時進行自連接,但我簡化了示例,這並不是真的可行 - 而且我被告知要這樣做......可能會有一堆以後還會加入其他領域。

那麼什麼是最好的方式來產生一個關聯數組,合併accountId在PHP中?是否有一個功能,或者我需要循環打轉等

+0

恐怕你將不得不使用5'的foreach '循環,你能做到嗎或者你需要代碼示例? – Vyktor 2012-02-03 12:32:54

回答

2

此嵌套foreach應該這樣做:

$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 [$ item ['accountId']]'初始化,並且你看看'$ userDetails',這不應該工作:)你介意我是否可以接受你的答案並修復你的錯誤? :) – Vyktor 2012-02-03 12:37:30

+0

@Vyktor固定和絕對工作,請參閱鍵盤的鏈接:-) – DaveRandom 2012-02-03 12:42:41

+0

真棒 - 非常感謝你們的快速答案 – 2012-02-03 12:44:32

相關問題