当property属于给定值时,删除数组元素

时间:2014-09-01 13:44:56

标签: php

我有以下数组。对于以下两种情况,我如何删除(取消设置)其中的所有元素?

  1. 删除prop等于“a”的所有元素。应删除元素0和2。
  2. 删除prop在数组中的所有元素(“a”,“d”)。应删除元素0,2和3。
  3. 我显然可以迭代数组,并检查是否有匹配,但我希望有更有效的方法。

    Array
    (
        [0] => obj Object
            (
                [prop] => a
            )
    
        [1] => obj Object
            (
                [prop] => b
            )
    
        [2] => obj Object
            (
                [prop] => a
            )
    
        [3] => obj Object
            (
                [prop] => d
            )
    
    )
    

2 个答案:

答案 0 :(得分:3)

array_filterPHP documentation here)可能就是最佳解决方案。

它当然会迭代你的数组,但它将迭代逻辑与过滤逻辑分开,使得维护代码变得更容易。

function filter_on_prop($val) {
  $arr = ['a', 'b'];
  return (!in_array($val->prop, $arr));
}

$array = array_filter ($array, 'filter_on_prop');

使用匿名函数:

$array = array_filter ($array, function ($val) use ($filter) {
  return (!in_array($val->prop, $filter));
});

$filter是您之前选择/填充的数组,以检查您想要的任何内容。

答案 1 :(得分:0)

您可以使用array_filter

$allowedProps = array('a','d');

$myfilter = function($val) use ($allowedProps)
{
    return !in_array($val->prop, $allowedProps);
}

$myfilteredArray = array_filter($array, $myFilter);