新手求助 PHP 数组操作问题

2022-06-01 10:53:57 +08:00
 qinwen00888

大家好,我是一个代码新手+业余玩家,一个 php 数组,如果我删除 id 为 1 的数组,怎么把 2 和 3 也删除

也就是 parent_id 为 1 和 2 的数组

$data = array(
    [0] => array(
        "id" => 1,
        "parent_id" => ""
    ),
    [1] => array(
        "id" => 2,
        "parent_id" => 1
    ),
    [2] => array(
        "id" => 3,
        "parent_id" => 2
    ),
    [3] => array(
        "id" => 3,
        "parent_id" => ""
    )
)
1977 次点击
所在节点    PHP
7 条回复
baiy
2022-06-01 11:00:02 +08:00
```
print_r(array_filter($data,function($item){
return $item['id'] != 1 && $item['parent_id'] != 1 && $item['parent_id'] != 2;
}));
```
qinwen00888
2022-06-01 11:23:41 +08:00
@baiy 我的意思是前端只传过来 id=1,后端删除 id=1 的数组,同时删除 parent_id=1 的数组,因为 parent_id=1 的那个数组的 id=2,所以也要删除 parent_id=2 的数组...如果还有 parent_id=2 的数组 id 为 3 ,如果还有 parent_id=3 的数组也要删除
IceBay
2022-06-01 11:28:01 +08:00
递归处理咯,传变量时可以用 & 符号传递引用变量
humpy
2022-06-01 11:39:19 +08:00
function removeIfMatch(&$arr, $id, $parentId)
{
foreach ($arr as $k => $v) {
if ($v['id'] === $id && $v['parent_id'] === $parentId) {
unset($arr[$k]);
}
if ($v['parent_id'] === $id) {
removeIfMatch($arr, $v['id'], $id);
}
}
}

removeIfMatch($data, 1, '');
var_dump($data);
abigeater
2022-06-01 11:39:31 +08:00
将#1 的代码封装一下,然后使用递归就好了
qinwen00888
2022-06-01 11:45:30 +08:00
谢谢各位大佬
seth19960929
2022-06-01 16:54:54 +08:00
按 parent_id 排好序 了, 直接迭代就行了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX