到目前为止,如果我必须循环访问多维数组,我会对每个维度使用 foreach 循环。
例如对于二维
foreach($array as $key=>$value)
{
foreach($value as $k2=>$v2)
{
echo
}
}
当我不知道数组的深度时怎么办?即深度是可变的。
我唯一能想到的就是编写一整堆循环代码,并在下一个值不是数组时中断循环。这似乎有点愚蠢。
有没有更好的办法?
是的,您可以使用递归 https://en.wikipedia.org/wiki/Recursion_%28computer_science%29。这是一个输出数组中所有元素的示例:
function printAll($a) {
if (!is_array($a)) {
echo $a, ' ';
return;
}
foreach($a as $v) {
printAll($v);
}
}
$array = array('hello',
array('world',
'!',
array('whats'),
'up'),
array('?'));
printAll($array);
你应该做什么always请记住,在进行递归时,您需要基本情况你不会再深入的地方。
我喜欢在继续该功能之前检查基本情况。这是一个常见的习惯用法,但并不是绝对必要的。您也可以检查foreach
如果您应该输出或执行递归调用,请使用循环,但我经常发现这样的代码更难维护。
当前输入和基本情况之间的“距离”称为variant并且是一个整数。在每次递归调用中,变体都应该严格递减。上一个示例中的变体是the depth of $a
。如果您不考虑变体,您可能会面临无限递归的风险,并且最终脚本将因以下原因而终止:堆栈溢出 https://en.wikipedia.org/wiki/Stack_overflow。在递归函数之前的注释中准确记录变体的情况并不罕见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)