2011-09-23 96 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循環。

希望有所幫助。