V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qinwen00888
V2EX  ›  PHP

新手求助 PHP 数组操作问题

  •  
  •   qinwen00888 · 2022-06-01 10:53:57 +08:00 · 1952 次点击
    这是一个创建于 905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我是一个代码新手+业余玩家,一个 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" => ""
        )
    )
    
    第 1 条附言  ·  2022-06-01 11:26:16 +08:00
    我的意思是前端只传过来 id=1,后端删除 id=1 的数组,同时删除 parent_id=1 的数组,因为 parent_id=1 的那个数组的 id=2,所以也要删除 parent_id=2 的数组,parent_id=2 的数组 id 为 3 ,如果还有 parent_id=3 的数组也要删除...
    7 条回复    2022-06-01 16:54:54 +08:00
    baiy
        1
    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
        2
    qinwen00888  
    OP
       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
        3
    IceBay  
       2022-06-01 11:28:01 +08:00
    递归处理咯,传变量时可以用 & 符号传递引用变量
    humpy
        4
    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
        5
    abigeater  
       2022-06-01 11:39:31 +08:00
    将#1 的代码封装一下,然后使用递归就好了
    qinwen00888
        6
    qinwen00888  
    OP
       2022-06-01 11:45:30 +08:00
    谢谢各位大佬
    seth19960929
        7
    seth19960929  
       2022-06-01 16:54:54 +08:00
    按 parent_id 排好序 了, 直接迭代就行了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3912 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:22 · PVG 13:22 · LAX 21:22 · JFK 00:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.