2011-09-23 4 views
2

먼저, 설명을 드려서 죄송합니다. 나는 PHP에서 두 개의 배열을 가진다. 첫 번째 배열은 객체의 배열입니다. 두 번째 배열은 배열의 배열입니다. 기본적으로 루프를 통해 객체를 해당 배열과 병합하고 병합 된 객체를 반환하려고합니다.PHP 배열 배열을 사용하여 객체의 배열을 병합하는 방법

는 객체 구조의 배열의 print_r()을 다음을 참조하십시오

Array 
(
[0] => stdClass Object 
    (
     [gear] => helloworld 
     [status] => running 
     [started] => 40 Minutes Ago 
     [start] => index.js 
     [route] => 127.0.0.1:3000 
     [parameters] => Array 
      (
      ) 

    ) 

[1] => stdClass Object 
    (
     [gear] => test 
     [status] => stopped 
     [started] => 
     [start] => index.js 
     [route] => 
     [parameters] => Array 
      (
      ) 

    ) 

[2] => stdClass Object 
    (
     [gear] => test2 
     [status] => stopped 
     [started] => 
     [start] => index.js 
     [route] => 
     [parameters] => Array 
      (
       [0] => first 
       [1] => second 
       [2] => third 
      ) 

    ) 

) 

가 배열 구조의 배열의 다음 print_r()를 참조하십시오

Array 
(
[0] => Array 
    (
     [gear] => helloworld 
     [machine_id] => E6z5ekvQ 
     [created_by] => 10010 
     [modified_by] => 10010 
     [created] => 2011-09-22T16:30:11-07:00 
     [modified] => 2011-09-22T16:30:11-07:00 
    ) 

[1] => Array 
    (
     [gear] => test 
     [machine_id] => E6z5ekvQ 
     [created_by] => 10010 
     [modified_by] => 10010 
     [created] => 2011-09-22T16:44:25-07:00 
     [modified] => 2011-09-22T16:44:25-07:00 
    ) 

[2] => Array 
    (
     [gear] => test2 
     [machine_id] => E6z5ekvQ 
     [created_by] => 10010 
     [modified_by] => 10010 
     [created] => 2011-09-22T16:45:43-07:00 
     [modified] => 2011-09-22T16:45:43-07:00 
    ) 

) 

그래서 기본적으로 모두 일치하는 키가 gear입니다. 그래서 우리는 배열의 두 번째 기어, 첫 번째 개체에서 기어와 일치하고, 같은 반환해야합니다 : 기어가 객체의 하나 개의 속성에 병합되어,

stdClass Object 
    (
     [gear] => helloworld 
     [status] => running 
     [started] => 40 Minutes Ago 
     [start] => index.js 
     [route] => 127.0.0.1:3000 
     [parameters] => Array 
      (
      ) 
     [machine_id] => E6z5ekvQ 
     [created_by] => 10010 
     [modified_by] => 10010 
     [created] => 2011-09-22T16:30:11-07:00 
     [modified] => 2011-09-22T16:30:11-07:00 
    ) 

공지 사항을 분명히 기어가 나타나지 않습니다 두번. 아이디어?

+0

고유 한 및/또는 식별 특성을 반복하고 일치시키고 다른 객체에 저장합니까? –

+2

생성자에 배열/객체를 전달할 수있는 객체의 클래스를 만들거나 속성을 설정하기위한'load()'메소드를 만드는 것이 좋습니다. –

답변

3

gear 또는 일부 고유 값으로 색인을 생성 할 수 있다면 훨씬 쉽습니다.

$indexed = array(); 

// create an array using 'gear' as the index 
foreach($arrayValue as $value) { 
    $indexed[$value['gear']] = $value; 
} 

// loop over each object 
foreach($objectArray as $obj) { 
    $value = $indexed[$obj->gear]; // find the corresponding array 
    foreach($value as $name => $val) { 
     $obj->$name = $val; // assign each array index/value pair to the object 
    } 
} 

인덱스가있는 배열을 반환하도록 코드를 만들려면 가능한 한 첫 번째 foreach 루프를 제거하면됩니다.

희망이 있습니다.

관련 문제