2012-02-03 3 views
1

나는 이런 식으로 보이는 PHP 배열을 많이 가지고있다. (왜 그런지 묻지 말아라. 나는 단지 일을하고있다.) :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에서 이러한 특성을 깨고을 모델링하는 것입니다 바르게. 그러나 나는 할 수 없다. db의 자체 조인 (self-join)시 자체 조인 (self-join)을 수행하는 것도 가능하지만 예제를 간소화했습니다.이 방법은 실제로 가능하지 않습니다. 그런 식으로 말 했습니다. 나중에 추가 필드가 추가되었습니다.

그렇다면 PHP에서 accountId를 병합하는 하나의 연관 배열을 만드는 가장 좋은 방법은 무엇입니까? 함수가 있습니까, 아니면

+0

당신이 5'foreach 문을 사용해야 할 것 같군요 '루프, 할 수 있습니까 아니면 코드 예제가 필요합니까? – Vyktor

답변

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

+0

@Vyktor 고정 및 확실히 작동, 코드 패드 링크 참조 :-) – DaveRandom

+0

굉장 - 빠른 답변을 위해 두 사람에게 대단히 감사합니다 –

관련 문제