在多维阵列php中按值删除,没有foreach



我正在循环一个这样的数组:

[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;}
}

最新更新