2017-02-24 57 views
0

我有兩個陣列象下面這樣:如何在php中將普通數組與對象數組合並?

陣列1:

array([0]=> 11, [1] => 2.5) 

陣列2:

Array ( 
    [0] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 3 
     [creator_name] => E1 
     [per_tar] => 300 
     [pro_tar] => 200 
     [ac] => 300 
     [PA] => 17 
     [Q1] => 800 
    ) 
    [1] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 4 
     [creator_name] => E2 
     [per_tar] => 100 
     [pro_tar] => 170 
     [ac] => 0 
     [PA] => 7 
     [Q1] => 270 
    ) 
) 

我想是我想通過以下所述陣列1與陣列2合併way

array 1 key [0]合併到所有鍵的數組2鍵[0]對象中。

所以我預期的輸出結果是:

Array ( 
    [0] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 3 
     [creator_name] => E1 
     [per_tar] => 300 
     [pro_tar] => 200 
     [ac] => 300 
     [PA] => 17 
     [Q1] => 800 
     [new] => 11 
    ) 
    [1] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 4 
     [creator_name] => E2 
     [per_tar] => 100 
     [pro_tar] => 170 
     [ac] => 0 
     [PA] => 7 
     [Q1] => 270 
     [new] => 2.5 
    ) 
) 

我嘗試array_merge()功能,但只是其合併兩個數組。請幫我

+2

的可能的複製[陣列合併與相同索引的PHP(http://stackoverflow.com/questions/26426025/array-merge-php-with-same-index) –

+0

我正在此錯誤array_merge( ):參數#1不是數組 – Nisanth

+0

可以顯示任何示例 – Nisanth

回答

2
$res = []; 
foreach($array1 as $key => $val){ 
    // before merging convert object to array 
    $arr = is_object($array2[$key]) ? (array)$array2[$key] : $array2[$key]; 
    $res[$key] = array_merge($array1[$key], $arr); 
} 

print_r($res); 
0

最好的辦法是將stdClass對象轉換爲數組,然後使用array_merge。

的stdClass的對象轉換爲一個數組,像這樣:

$array = json_decode(json_encode($object), true); 
0

首先,你可以各自stdClass的對象轉換在陣列型陣列中:

array_walk_recursive($array1, function ($v) { return (is_object($v)) ? (array)$v : $v; }); 
array_walk_recursive($array2, function ($v) { return (is_object($v)) ? (array)$v : $v; }); 

然後,使用array_merge:

$arrayMerge = array_merge($array1, $array2); 

我現在無法測試,請告訴我它是否有效。

1

你應該重複$array1項目,並插入每一個項目的價值進入$array2相關指數。

foreach ($array1 as $key=>$value){ 
    $array2[$key]->new = $value; 
} 

參見導致demo

此外,如果你想保持array2,在新的變量複製它的價值就像$newArray

$newArray = $array2; 
foreach ($array1 as $key=>$value){ 
    $newArray[$key]->new = $value; 
} 
+0

我有疑問。如果我的數組2有1個鍵意味着我正在從空值錯誤創建默認對象如何解決此問題 – Nisanth

+0

@Nisanth您應該檢查目標索引是否存在於$ array2中,然後在其中設置新屬性。請參閱https://3v4l.org/GPRPV – Mohammad