2013-01-12 181 views
-1

我需要合併一個數組與父數組的值。php數組合並父數組的值

$testArr=unserialize('a:6:{s:5:"queue";a:2:{i:6;s:1:"5";i:5;s:1:"2";}s:3:"sum";a:2:{i:6;s:3:"765";i:5;s:3:"2.1";}s:7:"sumAccD";a:2:{i:6;s:3:"543";i:5;s:3:"3.1";}s:7:"sumAccC";a:2:{i:6;s:2:"54";i:5;s:3:"3.3";}s:7:"comment";a:2:{i:6;s:12:"test comment";i:5;s:6:"111222";}s:3:"yt0";s:0:"";}'); 

$ret = array(); 
foreach ($testArr as $pkey => $pval) { 
if (is_array($pval)) { 
    foreach ($pval as $pvkey => $pvval) { 
     $ret[$pvkey] = array($pkey => $pvval); 
    } 
} 
} 
echo '<pre>', print_r($ret), '</pre>'; 

在這種情況下,打印出

Array 
(
[6] => Array 
    (
     [comment] => test comment 
    ) 

[5] => Array 
    (
     [comment] => 111222 
    ) 

) 
1 

Unfortunally它打印出唯一的評論。我需要添加其他行:queue,sum,sumAccD,sumAccC。陣列必須如下所示:

Array 
(
[6] => Array 
    (
     [queue] => 5 
     [sum] => '' 
     .... 
     [comment] => test comment 
    ) 

[5] => Array 
    (
     [queue] => 2 
     [sum] => 2.1 
     .... 
     [comment] => 111222 
    ) 

) 
1 

請幫助合併它們。 謝謝。

回答

0

問題與

更換

$ret[$pvkey] = array($pkey => $pvval); 

解決

$ret[$pvkey][$pkey] = $pvval; 
0

看這句話:

$ret[$pvkey] = array($pkey => $pvval); 

你分配每一次的關鍵,新的陣列,覆蓋什麼是以前在那裏。 在你的情況下,'comment'是被處理的最後一個鍵,所以這將是最終數組中唯一的鍵。

取而代之的是,你可以外內定義一個新的陣列只有一次,就像這樣:

$ret[$pvkey] = array(); 

,然後指定你的價值觀該數組在內部進行循環,你通常會做(所以沒有更多的創建陣列有!)

+0

當我試圖合併它們: $ ret [$ pvkey]。= array($ pkey => $ pvval); 它打印 [6] => ArrayArrayArrayArrayArray [5] => ArrayArrayArrayArrayArray – Serge

+0

這是因爲'.'是串並置運算符,因此,兩個操作數轉換爲字符串。轉換爲字符串的數組是PHP中的'Array'。不過,你可以用'+ ='合併數組。 –

+0

替換 解決的問題$ ret [$ pvkey] = array($ pkey => $ pvval); 與 $ ret [$ pvkey] [$ pkey] = $ pvval; – Serge