如果在php中包含特定项,如何从多维数组中删除数组

如果在php中包含特定项,如何从多维数组中删除数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,之前: 我想删除整个阵列,其中包括“BMW”作为一个项目 结果如下: $cars = array ( array("Volvo",22,18), array("BMW",15,13), array("Saab",5,2), array("Land Rover",17,15) ); 您可以使用循环检查每个数组 可以使用从基于自定义逻辑的数组中删除元素。如果要分别保留或删除元素,则回调函数应返回true或false $cars = array (

之前:

我想删除整个阵列,其中包括“BMW”作为一个项目

结果如下:

$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );

您可以使用循环检查每个数组

可以使用从基于自定义逻辑的数组中删除元素。如果要分别保留或删除元素,则回调函数应返回
true
false

   $cars = array
      (
      array("Volvo",22,18),
      array("BMW",15,13),
      array("Saab",5,2),
      array("Land Rover",17,15)
      );


    $cars_filtered = array();  
    foreach($cars as $single){
        if($single[0]!='BMW'){
            $cars_filtered[] = $single;
        }   
    }

    print_r($cars_filtered);
这里,我们过滤掉第一个元素等于
$filter
变量的所有行


请参见

我做了这个小功能,请记住,汽车品牌必须是钥匙[0]

示例

$filter = 'BMW';

$cars = array_filter($cars, function($car) use ($filter) {
    return $car[0] !== $filter;
});

希望这有帮助。问候。

仅扩展@iainn答案

“宝马”可能并不总是第一要素,所以

你可以做:

$filter = 'BMW';

$filteredCars = array_filter($cars, function($car) use($filter){
                       return in_array($filter, $car) === false;
                });

排除数组中存在的项。你可以随时做这件事

现场演示:

您可以使用和:


这里是。

如果数组像
[15,13,“BMW”],
,@user2486,是的,在这种情况下,
在数组中()
很方便。。。。。我是在反对问题中给出的例子,但我理解措辞与之不符。Ataur Rahman的答案在数组可以是任意顺序的情况下效果最好。是的,我只是想提一下,
isset
在数组中
搜索数组时有什么帮助?很好,
在数组中
会起作用,我只是想提一下,
isset
比_array中的
更快。如果可能不起作用,“更快”有什么好处?当然可以,但isset也会起作用。我不是说你的答案是错的。连我都对你的答案投了赞成票。我只是想说我不是一个挑剔的人。。但是在
foreach
中调用
array\u flip
???认真地如果数组由上千个元素组成会怎么样?@AtaurRahman:那么它甚至更快:@AtaurRahman:也检查一下,兄弟,你不必向我证明这些函数的
牢固性。我从没说过in_数组更快。但总有一些
基于情境的实现
可以。那么请做一些基准测试,而不是引用五年前的帖子。。。。创建一个包含1000个元素的数组(每个元素上有10个以上的元素),类似于OP的示例,然后对我们两个代码的执行情况进行基准测试。我不想成为一个傲慢的书呆子,但你应该先检查一下你自己的代码(就像我做的那样)。
<?php
$cars = array
(
    array("Volvo", 22, 18),
    array("BMW", 15, 13),
    array("Saab", 5, 2),
    array("Land Rover", 17, 15)
);

function removeCar (array $cars, string $name): array
{
    $returnArray = array();
    foreach ($cars as $array => $car) {
        if ($car[0] != $name) {
            $returnArray[] = $car;
        }
    }
    return $returnArray;
}

$cars = removeCar($cars, "BMW");
print_r($cars);
Array ( [0] => Array ( [0] => Volvo [1] => 22 [2] => 18 ) [1] => Array ( [0] => Saab [1] => 5 [2] => 2 ) [2] => Array ( [0] => Land Rover [1] => 17 [2] => 15 ) )
$filter = 'BMW';

$filteredCars = array_filter($cars, function($car) use($filter){
                       return in_array($filter, $car) === false;
                });
<?php

$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);

function removeFromArray($array, $make){
    $i = 0;
    $out = array();
    foreach ($array as $element) {
        if($element[0] != $make){
            $out[$i] = $element;
            $i++;
        }
    }
    return $out;
}
$cars = removeFromArray($cars, "BMW");
?>
foreach($cars as $key=>$value)  {
  if(isset(array_flip($value)["BMW"])){
    unset($cars[$key]);
  }
}
Array
(
    [0] => Array
        (
            [0] => Volvo
            [1] => 22
            [2] => 18
        )

    [2] => Array
        (
            [0] => Saab
            [1] => 5
            [2] => 2
        )

    [3] => Array
        (
            [0] => Land Rover
            [1] => 17
            [2] => 15
        )

)
// Exclude one car.
$exclude = 'BMW';
$result = array_intersect_key($cars, array_filter(
    array_column($cars, 0),
    function ($car) use ($exclude) {
        return $car !== $exclude;
    }
));

var_dump($result);

// Exclude multiple cars.
$exclude = ['BMW', 'Saab'];
$result = array_intersect_key($cars, array_diff(array_column($cars, 0), $exclude));

var_dump($result);