递归删除元素值

时间:2014-06-26 19:27:35

标签: php arrays recursion

所以我有以下数组:

$array = array(array('fruit1' => 'apple'), 
               array('fruit2' => 'orange'), 
               array('veg1' => 'tomato'), 
               array('veg2' => 'carrot'));

我希望运行这样的函数:

array_remove_recursive($array, 'tomato');

所以输出是这样的:

$array = array(array('fruit1' => 'apple'), 
               array('fruit2' => 'orange'), 
               array('veg2' => 'carrot')); // note: the entire array containing tomato has been removed!

这可以解决吗?

3 个答案:

答案 0 :(得分:0)

这将以任何深度递归取消设置匹配变量,然后仅在父元素为空时才删除它。

function recursive_unset(array &$array, $unwanted_val) {
    foreach ($array as $key => &$value) {
        if (is_array($value)) {
            recursive_unset($value, $unwanted_val);
            if(!count($value)){
                unset($array[$key]);
            }
        } else if($value == $unwanted_val){
            unset($array[$key]);
        }
    }
}

答案 1 :(得分:0)

从多维数组中递归移除多个值的函数。

# Example 1
$arr1 = array_remove_recursive($arr, 'tomato');

# Example 2
$arr2 = array_remove_recursive($arr, ['tomato', 'apple']);

function array_remove_recursive($arr, $values)
{
    if (!is_array($values))
        $values = [$values];

    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            if ($arr2 = array_remove_recursive($v, $values))
                $arr[$k] = $arr2;
            else
                unset($arr[$k]);
        } elseif (in_array($v, $values, true))
            unset($arr[$k]);
    }
    return $arr;
}

答案 2 :(得分:-1)

function array_remove_recursive($getArray,$getAssocValue)
{
    $returnArray    = array();
    if(is_array($getArray))
    {
        foreach($getArray as $indAssocValue)
        {
            if(is_array($indAssocValue))
            {
                foreach($indAssocValue as $innerKey=>$innerVal)
                {
                    if($innerVal!=$getAssocValue and $innerKey!="")
                    {
                        $returnArray[]  = array("$innerKey"=>$innerVal);
                    }
                }
            }
        }
    }
    return $returnArray;
}

$array = array(array('fruit1' => 'apple'), 
               array('fruit2' => 'orange'), 
               array('veg1' => 'tomato'), 
               array('veg2' => 'carrot'));
               print_r($array);
               echo "<br />";
$array  = array_remove_recursive($array, 'tomato');
print_r($array);

希望上面的代码有用。