【问题标题】:Remove part of associative array [duplicate]删除关联数组的一部分[重复]
【发布时间】:2013-11-14 11:39:43
【问题描述】:

我想搜索一个关联数组,当我找到一个值时,删除数组的那部分。

这是我的数组的一个示例:

    Array
(
    [0] => Array
        (
            [id] => 2918
            [schoolname] => Albany Medical College
            [AppService] => 16295C0C51D8318C2
        )

    [1] => Array
        (
            [id] => 2919
            [schoolname] => Albert Einstein College of Medicine
            [AppService] => 16295C0C51D8318C2
        )

    [2] => Array
        (
            [id] => 2920
            [schoolname] => Baylor College of Medicine
            [AppService] => 16295C0C51D8318C2
        )
}

我要做的是在AppService 中找到值16295C0C51D8318C2,然后删除数组的那部分。因此,例如,如果该代码要在上述数组上运行,它会清空整个数组,因为逻辑匹配该数组中的所有内容。

到目前为止,这是我的代码:

            foreach($this->schs_raw as $object) {
                if($object['AppService'] == "16295C0C51D8318C2") {
                    unset($object);
                }
        }

【问题讨论】:

  • 您正在尝试取消设置 foreach 循环的局部变量。但是您打算修改原始数组内容。
  • 尝试参考,以免使用副本

标签: php arrays associative-array


【解决方案1】:

试试这样:

foreach ($this->schs_raw as &$object) {
    if($object['AppService'] == "16295C0C51D8318C2") {
        unset($object);
    }
}

最终:

foreach ($this->schs_raw as $k => $object) {
    if($object['AppService'] == "16295C0C51D8318C2") {
        unset($this->schs_raw[$k]);
    }
}

【讨论】:

【解决方案2】:

为什么不创建一个新数组?如果未找到匹配,则将索引添加到新数组...如果找到,请不要添加。您的新数组将只包含您想要的数据。

【讨论】:

  • 想象一个数组在应用程序中被使用的次数太多,应该实现一个逻辑,这个数组将被修改
【解决方案3】:

试试这个:

foreach($this->schs_raw as $key=>$object) {
  if($object['AppService'] == "16295C0C51D8318C2") {      
    unset($this->schs_raw[$key]); // unset the array using appropriate index    
    break; // to exit loop after removing first item
  }
}

【讨论】:

    【解决方案4】:

    array_filter 会有所帮助 (http://php.net/manual/en/function.array-filter.php)

    $yourFilteredArray = array_filter(
        $this->schs_raw,
        function($var) {
            return $object['AppService'] != "16295C0C51D8318C2"
        }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2013-01-11
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2012-12-01
      • 2018-07-01
      相关资源
      最近更新 更多