从 PHP 数组中递归删除空值和空值

Remove empty and null value recursively from PHP array

我有一个这样的数组

$a = array(
  'b' => array(
    'two' => false,
    'three' => '',
    'four' => null,
    'five' => array(
       'fp' => null,
       'kp' => null
    ),
    'six' => array()
  ),
  'c' => '  ',
  'd' => null
);

我只想从此 n 级数组中删除 nullempty 键。最后我应该得到这个:

$a = array(
  'b' => array(
    'two' => false
  ),
  'c' => '  '
);

我有这个功能

public function ArrayCleaner($input) { 
  foreach ($input as &$value) { 
    if (is_array($value)) { 
      $value = ArrayCleaner($value); 
    }
  }
  return array_filter($input); 
}

但是,正如 array_filter 所述,它还会删除 false 值键(我想保留)。那么我应该对我的函数进行哪些更改才能达到预期的结果?

你很接近,只需通过提供用于过滤的回调函数来更改你的代码如下:

function ArrayCleaner($input) { 
  foreach ($input as &$value) { 
    if (is_array($value)) { 
      $value = ArrayCleaner($value); 
    }
  }

  return array_filter($input, function($item){
    return $item !== null && $item !== '';
  }); 
}
function ArrayCleaner($input) { 
  foreach ($input as $key=>&$value) { 
     if(is_int($key)){  
        unset($input[$key]);
        continue;
     }
    if (is_array($value)) { 
       $value = ArrayCleaner($value); 
    }
  }

  return array_filter($input, function($item){
    return $item !== null && $item !== '';
  }); 
}

但是问题:空键是什么意思? 'one' 表示它的索引是数字0。那么如果我们用 is_int($key) 过滤它,如何处理 '2'=>'this data?' ?它将转换为 php 数组中的 int(2)。