我正在循环一个这样的数组:
[0] => stdClass Object
(
[codigo] => 1
[producto] => coche
)
[1] => stdClass Object
(
[codigo] => 2
[producto] => coche
)
[2] => stdClass Object
(
[codigo] => 3
[producto] => casa
)
[3] => stdClass Object
(
[codigo] => 4
[producto] => Avion
)
[4] => stdClass Object
(
[codigo] => 5
[producto] => casa
)
我有foreach,那就是Okey,但是现在,我希望当我找到像" Casa"这样的值时,删除具有该值的所有元素。然后阵列循环较小。然后,当我找到下一个值时," Coche"删除了所有名称的元素,然后才能找到所有值。那是因为很多具有相同值的元素,并且不始终循环,我可以在找到时启用此元素。
就像我第一次找到值Coche一样,数组看起来像:
[2] => stdClass Object
(
[codigo] => 3
[producto] => casa
)
[3] => stdClass Object
(
[codigo] => 4
[producto] => Avion
)
[4] => stdClass Object
(
[codigo] => 5
[producto] => casa
)
我有这个:
foreach ($products as $key => $value) {
if(value == 'coche') $coche = 1;
//inside this if, i just want to delete from product's all elements with
// value coche, but i don't want to use another foreach, because is a
// non sense, it must be with a function.
}
您可以使用array_filter为此:
<?php
$elements = [
0 => [
'codigo' => 1,
'producto' => 'coche'
],
1 => [
'codigo' => 2,
'producto' => 'coche'
],
2 => [
'codigo' => 3,
'producto' => 'casa'
],
3 => [
'codigo' => 4,
'producto' => 'Avion'
],
4 => [
'codigo' => 5,
'producto' => 'casa'
]
];
$els = array_filter($elements, function($el)
{
return ($el['producto'] !== 'casa');
});
echo '<pre>'. print_r($els, 1) .'</pre>';
在这里我使用数组,所以只需替换以下线:
return ($el['producto'] !== 'casa');
with:
return ($el->producto !== 'casa');
它将适用于您的代码。
本质上,我们返回阵列中的所有元素,其中producto不等于casa。
然后,您只能循环循环。您也可以在您的范围内做:
foreach ($elements as $el)
{
if ($el->producto == 'casa') {continue;}
}