Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按值递归删除元素_Php_Arrays_Recursion - Fatal编程技术网

Php 按值递归删除元素

Php 按值递归删除元素,php,arrays,recursion,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('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!
这是可解的吗?

函数数组\u remove\u递归($getArray,$getAssocValue)
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);
{ $returnArray=array(); if(is_数组($getArray)) { foreach($getArray作为$indAssocValue) { if(is_数组($indAssocValue)) { foreach($indAssocValue作为$innerKey=>$innerVal) { 如果($innerVal!=$getAssocValue和$innerKey!=“”) { $returnArray[]=数组($innerKey=>$innerVal); } } } } } return$returnArray; } $array=array(数组('FROUT1'=>'apple'), 数组('FROUT2'=>'orange'), 数组('veg1'=>'tomato'), 数组('veg2'=>'carrot'); 打印(数组); 回声“
”; $array=array\u remove\u recursive($array,'tomato'); 打印(数组);

希望上面的代码能有所帮助。

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

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]);
        }
    }
}

函数从多维数组中递归删除多个值

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

@cmorrissey这不是一个递归函数,它不会深入到2个级别