如果在php中包含特定项,如何从多维数组中删除数组
之前: 我想删除整个阵列,其中包括“BMW”作为一个项目 结果如下:如果在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 (
$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);