2012-09-19 219 views
0

我有一個數組$templates,看起來像這樣:PHP刪除嵌套陣列

 Array 
(
    [0] => Array 
     (
      [displayName] => First Template 
      [fileName] => path_to_first_template 
     ) 

    [1] => Array 
     (
      [displayName] => Second Template 
      [fileName] => path_to_second_template 
     ) 

    [2] => Array 
     (
      [displayName] => Third template 
      [fileName] => path_to_third_template 
     ) 

) 

我想使它看起來像這樣:

 Array 
(
    [path_to_first_template] => First Template 
    [path_to_second_template] => Second Template 
    [path_to_third_template] => Third Template 
) 

也就是說,我要的fileName嵌套數組成爲新數組的關鍵字,並且displayName成爲它的值。

有一個漂亮的方式做到這一點無需經過陣列,具有循環。我沒有找到運氣,因爲我不知道要搜索什麼。

+2

顯然需要循環訪問數組,即使它發生在幕後。爲什麼不簡單地這樣做? – Jon

+0

@Jon是的,我知道。這是一個試圖讓我的代碼簡單,並避免包含我自己的小型庫,如果有一種更簡單的方法來使用內置函數。 :-) – Andy0708

+0

有一種方法可以做到這一點,但如果它比'foreach'更好,那它真的值得商榷。我在我的答案中都顯示。 – Jon

回答

3

下面是行動的經典foreach

$result = array(); 
foreach($array as $row) { 
    $result[$row['fileName']] = $row['displayName']; 
}; 

這裏有一個 「聰明」 的方式做到這一點:

$result = array(); 
array_walk($array, function($row) use (&$result) { 
    $result[$row['fileName']] = $row['displayName']; 
}); 

正如你所看到的,第二種方法並不比第一種更好。唯一的優點是理論上你可以將第二種形式堆疊起來,因爲它是單一的表達式,但是在實踐中它已經足夠長了,所以你不想這麼做。

2
陣列中

循環,使一個新問題:

$newArray = array(); 
foreach($array as $val){ 
    $newArray[$val['fileName']] = $val['displayName']; 
} 
print_r($newArray); 
0
$ret = array() 
foreach ($templates as $template) { 
    $ret[$template["fileName"]] = $template["displayName"]; 
} 
+1

foreach不適用 – Surace