2011-05-12 300 views
1

我想打開(在PHP)像如何將多維數組轉換爲單維數組?

(["a"] => (
    ["x"] => "foo", 
    ["y"] => "bar"), 
["b"] => "moo", 
["c"] => (
    ["w"] => (
     ["z"] => "cow") 
     ) 
) 

(["a.x"] => "foo", 
["a.y"] => "bar", 
["b"] => "moo", 
["c.w.z"] => "cow") 

如何做到這一點?

+0

是它唯一的3級深或任意水平很深? – 2011-05-12 14:05:16

+0

這是任意級別的深度,儘管它很少超過4級。 – 2011-05-12 14:07:08

回答

7

您可以創建一個遞歸函數:

function flatten($arr, &$out, $prefix='') { 
    $prefix = $prefix ? $prefix . '.' : ''; 
    foreach($arr as $k => $value) { 
     $key = $prefix . $k; 
     if(is_array($value)) { 
      flatten($value, $out, $key); 
     } 
     else { 
      $out[$key] = $value; 
     } 
    } 
} 

你可以使用它作爲

$out = array(); 
flatten($array, $out); 
+0

如何將完整的數組路徑作爲對象標識符與此對象一起存儲? – 2011-05-12 14:09:55

+0

擊敗我30秒。 +1 – moteutsch 2011-05-12 14:10:55

+0

@Cobra:我不知道你的意思。請詳細說明。 – 2011-05-12 14:13:18

相關問題