从 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 级数组中删除 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
值键(我想保留)。那么我应该对我的函数进行哪些更改才能达到预期的结果?
你很接近,只需通过提供用于过滤的回调函数来更改你的代码如下:
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)。
我有一个这样的数组
$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
值键(我想保留)。那么我应该对我的函数进行哪些更改才能达到预期的结果?
你很接近,只需通过提供用于过滤的回调函数来更改你的代码如下:
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)。