我有一个像这样的数组
$a = array(
'b' => array(
'two' => false,
'three' => '',
'four' => null,
'five' => array(
'fp' => null,
'kp' => null
),
'six' => array()
),
'c' => ' ',
'd' => null
);
我想从此n级数组中仅删除null
和empty
个键。最后我应该得到这个:
$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
值键(我想要保留)。那么我应该在功能上做出哪些改变来达到预期的效果呢?
答案 0 :(得分:1)
你很接近,只需通过提供用于过滤的回调函数来改变你的代码,如下所示:
function ArrayCleaner($input) {
foreach ($input as &$value) {
if (is_array($value)) {
$value = ArrayCleaner($value);
}
}
return array_filter($input, function($item){
return $item !== null && $item !== '';
});
}
答案 1 :(得分:0)
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 !== '';
});
}
但问题:空键是什么意思? '一个'表示其索引为数字0.因此,如果我们使用is_int($key)
之类的内容对其进行过滤,那么如何处理'2'=>'this data?'
?它将在php Array中转换为int(2)。