使用 PHP 中的嵌套输出遍历数组
walk through array with nested output in 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()
会 return 我的数组在第一级(我不想要)。
问题是如何用重复的块简化这段代码?
这是一个递归的工作,在这里使用 array_walk_recursive 最容易实现。
尽管如此,请确保您了解代码的作用,empty returns 对于零,这可能是个问题。
$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);
我有这个代码:
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()
会 return 我的数组在第一级(我不想要)。
问题是如何用重复的块简化这段代码?
这是一个递归的工作,在这里使用 array_walk_recursive 最容易实现。
尽管如此,请确保您了解代码的作用,empty returns 对于零,这可能是个问题。
$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);