我想过滤通过将XML转换为数组而创建的数组。 我想删除key = 0和空值(fe&#34; InvalidKey&#34;)的数组的所有父键,但不是那些具有自定义名称且没有值的数组(fe&#34;柱&#34)。 我已经使用过array_filter(即使与array_map结合使用),但这些函数会从数组中过滤掉太少或太多的信息。 我还试图创建一个loopable函数来检查当前数组是否有一个0和一个空值的键,但我不知道如何获取当前数组的父键,fe:< / p>
Array
(
[InvalidKey] => Array
(
[0] => *NULL*
)
);
key($arrInput) = 0;
parent::key($arrInput) = "InvalidKey";
那么,如何得到:
Array
(
[test] =>
[demo] => 524018
[column] =>
[xml] => Array
(
[Header] => Array
(
[0] => Array
(
[ValidKey] => Array
(
[0] => 1234
)
[InvalidKey] => Array
(
[0] =>
)
)
)
[Body] => Array
(
[0] => *NULL*
)
[Footer] => Array
(
[0] => Array
(
[ValidKey] => Array
(
[0] => I am valid
)
[MoreValidKey] => Array
(
[0] => I am valid too
)
[InvalidKey] => Array
(
[0] =>
)
)
)
)
)
要:
Array
(
[test] =>
[demo] => 524018
[column] =>
[xml] => Array
(
[Header] => Array
(
[0] => Array
(
[ValidKey] => Array
(
[0] => 1234
)
)
)
[Footer] => Array
(
[0] => Array
(
[ValidKey] => Array
(
[0] => I am valid
)
[MoreValidKey] => Array
(
[0] => I am valid too
)
)
)
)
)
PS:使用的数组键名是可变的。为简单起见,我使用&#34;(In)ValidKey&#34;。阵列可以尽可能深,所以我不能用2 for循环。
答案 0 :(得分:0)
您需要编写一个自定义脚本来检查数组的所有元素。
示例:
<?php
$test = [
[
[
"asdf",
"",
0,
false,
true,
[
"asdf",
"",
[]
]
],
[]
],
[]
];
function removeEmptyElements(array $array)
{
foreach ($array as $key => $value) {
if (is_array($value))
$value = removeEmptyElements($value);
if (empty($value) && false !== $value && 0 !== $value)
unset($array[$key]);
else
$array[$key] = $value;
}
return $array;
}
print_r(removeEmptyElements($test));