如何删除嵌套数组的一项? [复制]
Posted
技术标签:
【中文标题】如何删除嵌套数组的一项? [复制]【英文标题】:How to delete an item of a nested array? [duplicate] 【发布时间】:2021-12-02 16:18:42 【问题描述】:我有一个这样的数组:
$arr = [
['id' => 12, 'name' => 'Martin', 'cellphone' => '0019949437'],
['id' => 15, 'name' => 'Alex', 'cellphone' => "00183847394"]
];
我需要从上面的数组中删除 cellphone
项目。我写了一个代码来做到这一点:
$res = array_filter($arr, function($arr) unset($arr['cellphone']); return $arr; );
但该项目仍然存在并且$res
与$arr
相同。怎么了?什么未设置不会发生?
【问题讨论】:
你为什么要尝试使用array_filter
作为开始,这将是array_walk
的更多用例。
unset
不起作用,因为 $arr
不是真实数组的引用。使用循环。
@CBroe 好吧,我想过滤数组中的一项。反正我也不知道,在这种情况下,数组映射或数组遍历可能是更好的选择。
array_filter
的目的是完全从 $arr
中删除项目 - 这不是您想要做的开始,您想要修改项目.
【参考方案1】:
array_filter
使用回调函数过滤数组元素
由于您试图更改嵌套数组,array_filter
将不起作用。
使用循环,类似foreach()
或array_walk()
应该没问题。
<?php
// Input
$arr = [
['id' => 12, 'name' => 'Martin', 'cellphone' => '0019949437'],
['id' => 15, 'name' => 'Alex', 'cellphone' => "00183847394"]
];
// Using foreach
foreach($arr as &$tmp)
unset($tmp['cellphone']);
// Same result, using array_map
array_walk($arr, function (&$tmp) unset($tmp['cellphone']); );
// Show result
var_dump($arr);
这里我们循环$arr
,使用&
to get the reference到更深的数组,并使用unset()
删除cellphone
。
结果:
array(2)
[0]=>
array(2)
["id"]=>
int(12)
["name"]=>
string(6) "Martin"
[1]=>
&array(2)
["id"]=>
int(15)
["name"]=>
string(4) "Alex"
Try it online!
【讨论】:
【参考方案2】:使用array_map:它返回一个包含应用回调结果的数组
$arr = [
['id' => 12, 'name' => 'Martin', 'cellphone' => '0019949437'],
['id' => 15, 'name' => 'Alex', 'cellphone' => "00183847394"]
];
function unsetCellPhone($u)
unset($u['cellphone']);
return $u;
$res = array_map("unsetCellPhone", $arr);
print_r($res);
Demo
【讨论】:
以上是关于如何删除嵌套数组的一项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章