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个级别