Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP删除嵌套数组_Php_Arrays - Fatal编程技术网

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"];
}