【问题标题】:Most Efficient Way to Delete Nested Array Element删除嵌套数组元素的最有效方法
【发布时间】:2012-10-22 11:00:39
【问题描述】:

假设我有以下内容:

Array(
[0] => Array
    (
        [id] => 1
        [item] => first item
    )

[1] => Array
    (
        [id] => 3
        [item] => second item
    )

[2] => Array
    (
        [id] => 5
        [item] => third item
    )

)

我想删除 id = 5 的项目。我知道我可以循环遍历数组并取消设置,但我希望有一个更直接/更有效的解决方案。

【问题讨论】:

    标签: php arrays unset


    【解决方案1】:

    对于多层嵌套数组

    <?php
        function remove_array_by_key($key,$nestedArray){
            foreach($nestedArray as $k=>$v){
                if(is_array($v)){
                    remove_array_by_key($key,$v);
                } elseif($k==$key){
                    unset($nesterArray[$k]);
                }
            }
            return $nestedArrat;
        }
    ?>
    

    【讨论】:

      【解决方案2】:

      最有效的方法是拥有 2 个数组。

      ID => Index
      Index => Object (your current array)
      

      在您的 ID => 索引辅助数组中搜索 ID,该值将是您的主数组的索引,然后将它们都取消设置。

      【讨论】:

        【解决方案3】:

        您为什么不使用设置为 ID 的键创建数组?例如:

        Array(
        [1] => Array
            (
                [id] => 1
                [item] => first item
            )
        
        [3] => Array
            (
                [id] => 3
                [item] => second item
            )
        
        [5] => Array
            (
                [id] => 5
                [item] => third item
            )
        
        )
        

        然后你可以写:

        <?php    
        unset($array[5]); // Delete ID5
        ?>
        

        【讨论】:

        • 我正在处理一些较旧的 JSON 并且无法操作它,除非我能以某种方式翻译数组...
        • 嗯,我认为如果您无法操作,您可能只能循环遍历
        【解决方案4】:

        如果您不能将 ID 作为外部数组的键(那么您可以简单地使用 unset($arr[5]);),循环遍历数组确实是 dg 的方法。

        foreach($arr as $key => $value) {
            if($value['id'] === 5) {
                unset($arr[$key]);
                break;
            }
        }
        

        另一种选择是使用array_filter - 但效率较低,因为它会创建一个新数组:

        $arr = array_filter($arr, function($value) {
            return $value['id'] !== 5;
        });
        

        【讨论】:

          猜你喜欢
          • 2018-03-31
          • 1970-01-01
          • 1970-01-01
          • 2013-11-22
          • 2017-12-31
          • 2022-07-19
          • 2020-06-05
          • 2019-09-19
          • 2018-08-29
          相关资源
          最近更新 更多