2012-01-12 3 views
1

를 병합 :PHP : 다차원 배열에서 동일한 키를 찾아 나는이처럼 보이는 다차원 배열을 가지고 결과를

$array = (
    [0] => array (
     ['WS'] => array(
      [id] => 2, 
      [name] => 'hello' 
      ) 
     ) 
    ), 
    [1] => array (
     ['SS'] => array(
      [id] => 1, 
      [name] => 'hello2' 
      ) 
     ) 
    ), 
    [2] => array (
     ['WS'] => array(
      [id] => 5, 
      [name] => 'helloAGAIN' 
      ) 
     ) 
) 

당신이 볼 수 있듯이, $ 배열 [0] $ 배열 [2 ] 같은 열쇠 [WS]를가집니다. 그 "같은 열쇠"를 찾는 함수가 필요합니다. 그 후 나는이 두 배열을 하나로 병합합니다. f.e.

$array = 
(
    [0] => array 
     (
      ['WS'] => array 
       (
        [0] => array 
         (
          [id] => 2, 
          [name] => 'hello' 
         ), 
        [1] => array 
         (
          [id] => 5, 
          [name] => 'helloAGAIN' 
         ) 
       ) 
     ), 
    [1] => array 
     (
      ['SS'] => array 
       (
        [0] => array 
         (
           [id] => 1, 
           [name] => 'hello2' 
         ) 
       ) 
     ) 
    ) 

당신이 내 문제를 이해하기를 바랍니다. 은 배열을 통해

+2

왜 반복하고 배열을 다시 작성해야합니까? 하나의 패스 (pass)와 일종의 키 룩업 어레이 (key lookup array)가 그것을 커버해야한다. – JohnP

답변

8
function group_by_key ($array) { 
    $result = array(); 
    foreach ($array as $sub) { 
    foreach ($sub as $k => $v) { 
     $result[$k][] = $v; 
    } 
    } 
    return $result; 
} 

See it working

+0

감사합니다. 나를위한 그것의 아주 좋은 해결책. 이해하기 쉽고 잘 작동합니다. – SnowBallz

1

당신이 할 수있는 단지 루프를 인사와 일치하는 요소

을 삭제
$multiArray = array('0' => etc etc); 
    $matches = array(); 

    foreach(multiArray as $key => $val) 
    { 
     $keyValToCheck = key($val); 

     if(!in_array($keyValToCheck, $matches)) 
     { 
      $matches[] = $keyValToCheck; // add value to array matches 

      // remove item from array because match has been found 
      unset($multiArray[$key][$keyValToCheck]); 
     } 
    } 
1

당신은 단순히 배열의 첫 번째 수준을 제거 할 수 있으며 같은 끝낼 것 이 :

$array = (
    ['WS'] => array(
     [0] => array(
       [id] => 2, 
       [name] => 'hello' 
     ), 
     [1] => array(
       [id] => 5, 
       [name] => 'helloAGAIN' 
     ) 
    ), 
    ['SS'] => array(
     [0] => array(
       [id] => 1, 
       [name] => 'hello2' 
     ) 
    ) 
) 

다음과 같이 배열에 항목을 추가 할 수 있습니다.

$array['WS'][] = array(); 
+1

thx 많이 :) 배열의 구조가 나를 내 문제의 해결책으로 이끌었습니다. 배열을 만드는 것에 대한 제 생각은 훨씬 복잡했습니다. – SnowBallz

관련 문제