首页 > 解决方案 > 在没有foreach的多维数组php中按值删除

问题描述

我正在循环这样的数组:

[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,没关系,但是现在,我希望当我找到像'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.
}

标签: php

解决方案


您可以为此使用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');

和:

return ($el->producto !== 'casa');

它适用于您的代码。

本质上,我们返回数组中 producto 不等于 casa 的所有元素。

然后你可以只循环你想要的元素。你也可以在你的 foreach 里面做:

foreach ($elements as $el)
{
    if ($el->producto == 'casa') {continue;}
}

推荐阅读