【问题标题】:Delete multiple items array without disrupt order of the key PHP [duplicate]删除多个项目数组而不破坏键 PHP 的顺序 [重复]
【发布时间】:2019-10-31 08:47:30
【问题描述】:

我想删除多个项目数组而不破坏键的顺序。那么解决这个问题的最佳方法是什么?因为我尝试使用 splice 但已删除元素的键被跳过

例子:

$del_item = array('orange', blueberry);
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
print_r($array);
//[0]=>"apple", [1]=>"orange", [2]=>"strawberry", [3]=>"blueberry", [4]=>"kiwi"

$deleted= array('apple', 'strawberry', 'kiwi');
print_r($deleted);
//[0]=>"apple", [1]=>"strawberry", [2]=>"kiwi"

【问题讨论】:

  • 因为我尝试使用 splice,但已删除元素的键被跳过 - 您希望键保持空白值吗?
  • 你没有删除任何你创建两个数组的东西,显然它们看起来不同。如果你取消设置(删除)一个项目,那么你会得到你正在寻找的结果
  • @SougataBose 我希望订单密钥保留 0 1 2 3 4 5 ...

标签: php arrays key


【解决方案1】:

您可以将array_diffarray_values 一起使用

$deleted = array_values(array_diff($array, $del_item));

array_diff 将删除您想要的项目,array_values 将重新索引它们

【讨论】:

    【解决方案2】:

    你可以迭代数组,Demo

    $del_item = array('orange', 'blueberry');
    $array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
    $del_item = array_flip($del_item);
    $result = [];
    foreach($array as $key => $value){
        if(!isset($del_item[$value])){
            $result[$key] = $value;
        }
    }
    print_r($result);
    

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多