2012-09-19 222 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