PHP删除嵌套数组
我有一个数组PHP删除嵌套数组,php,arrays,Php,Arrays,我有一个数组$templates,如下所示: Array ( [0] => Array ( [displayName] => First Template [fileName] => path_to_first_template ) [1] => Array ( [displayName] => Second Te
$templates
,如下所示:
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
)
我想让它看起来像这样:
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
是它的值
有没有一种很好的方法可以做到这一点,而不必在数组中循环。我搜索时运气不佳,因为我不知道要搜索什么。在数组中循环并创建一个新数组:
$newArray = array();
foreach($array as $val){
$newArray[$val['fileName']] = $val['displayName'];
}
print_r($newArray);
在阵列中循环并创建一个新阵列:
$newArray = array();
foreach($array as $val){
$newArray[$val['fileName']] = $val['displayName'];
}
print_r($newArray);
下面是一个经典的
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'];
});
如您所见,第二种方法并不比第一种方法好。唯一的优点是,理论上你可以叠加第二种形式,因为它是一个单一的表达式,但实际上它已经是一个足够长的表达式了,所以你不想这样做。这里有一个经典的
foreach
正在运行:
$result = array();
foreach($array as $row) {
$result[$row['fileName']] = $row['displayName'];
};
$ret = array()
foreach ($templates as $template) {
$ret[$template["fileName"]] = $template["displayName"];
}
这里有一个“聪明”的方法:
$result = array();
array_walk($array, function($row) use (&$result) {
$result[$row['fileName']] = $row['displayName'];
});
如您所见,第二种方法并不比第一种方法好。唯一的优点是,理论上你可以叠加在第二个表单上,因为它是一个单一的表达式,但实际上它已经足够长了,所以你不想这样做。显然需要在数组中循环,即使它发生在幕后。“为什么不干脆这么做呢?”乔恩:是的,我知道。这是为了使我的代码保持简单,并避免在有更简单的方法使用内置函数时必须包含我自己的小库。:-)有一种方法可以做到这一点,但如果它比foreach更好的话,这确实值得商榷。在我的回答中,我将两者都显示出来。显然需要在数组中循环,即使它发生在幕后。“为什么不干脆这么做呢?”乔恩:是的,我知道。这是为了使我的代码保持简单,并避免在有更简单的方法使用内置函数时必须包含我自己的小库。:-)有一种方法可以做到这一点,但如果它比foreach更好的话,这确实值得商榷。我在回答中说明了这两个问题。
$ret = array()
foreach ($templates as $template) {
$ret[$template["fileName"]] = $template["displayName"];
}