遍历PHP中带有嵌套输出的数组



我有这个代码:

foreach ($_POST as $key1 => $item1):
if (is_array($item1)):
foreach ($item1 as $key2 => $item2):
if (is_array($item2)):
foreach ($item2 as $key3 => $item3):
if (is_array($item3)):
foreach ($item3 as $key4 => $item4):
$_POST[$key1][$key2][$key3][$key4] = empty($item4) ? NULL : $item4;
endforeach;
else:
$_POST[$key1][$key2][$key3] = empty($item3) ? NULL : $item3;
endif;
endforeach;
else:
$_POST[$key1][$key2] = empty($item2) ? NULL : $item2;
endif;
endforeach;
else:
$_POST[$key1] = empty($item1) ? NULL : $item1;
endif;
endforeach;

$_POST是一个4级数组,array_walk()会返回我的第一级数组(我不想要(。

问题是如何通过重复块来简化此代码?

这是一项递归作业,在这里使用array_walk_recurive最容易实现。

确保您理解代码的作用,但是,空对零返回true,这可能是一个问题。

$input = [
'param1' => [
'sub1_1' => [
'sub1_1_1' => [
'sub1_1_1_1' => 'foo',
'sub1_1_1_2' => '',
'sub1_1_1_3' => 0,
'sub1_1_1_4' => 'bar',
'sub1_1_1_5' => false,
'sub1_1_1_6' => [
'sub1_1_1_6_1' => 'baz',
'sub1_1_1_6_2' => ''
]
]
]
]
];
array_walk_recursive($input, function(&$value)
{
$value = (empty($value)) ? null:$value;
});
// Verify that false-y values were changed to null
assert($input['param1']['sub1_1']['sub1_1_1']['sub1_1_1_2']===null, 'Empty string should be normalized to null');
assert($input['param1']['sub1_1']['sub1_1_1']['sub1_1_1_3']===null, 'Zero should be normalized to null');
assert($input['param1']['sub1_1']['sub1_1_1']['sub1_1_1_5']===null, 'False should be normalized to null');
// Check out the state of the normalized input
var_dump($input);

最新更新