在PHP中,如何在不知道数组是否为数组的情况下循环数组?
举个例子更好:
Array
(
[0] => Array
(
[0] => big
[1] => small
)
[1] => Array
(
[0] => big
[1] => tiny
)
[2] => Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
[3] => row
[4] => cols
[5] => blablabla
[6] => Array
(
[0] => asd
[1] => qwe
)
}
知道吗?谢谢
选择哪种方法取决于您想对数据做什么。
array_walk_recursive
[docs]允许递归遍历数组。
您可以使用is_array来检查该元素是否是数组,如果是,则递归循环。
您可以使用is_array
来检查某个东西是否是数组,和/或使用is_object
来检查它是否可以在foreach
:中使用
foreach ($arr as $val)
{
if (is_array($val) || is_object($val))
{
foreach ($val as $subval)
{
echo $subval;
}
}
else
{
echo $val;
}
}
另一种选择是使用RecursiveIteratorIterator
:
$it = new RecursiveIteratorIterator(
new RecursiveArrayIterator($arr),
RecursiveIteratorIterator::SELF_FIRST);
foreach($it as $value)
{
# ... (each value)
}
递归迭代器在深度上适用于多个级别。
foreach( $array as $value ) {
if( is_array( $value ) ) {
foreach( $value as $innerValue ) {
// do something
}
}
}
如果您知道它将是最多2个级别的嵌套数组,那么这将起作用。如果您不知道嵌套的级别,则需要使用递归。或者可以使用array_walk_recurative 等函数
$big_array = array(...);
function loopy($array)
{
foreach($array as $element)
{
if(is_array($element))
{
// Keep looping -- IS AN ARRAY--
loopy($element);
}
else
{
// Do something for this element --NOT AN ARRAY--
}
}
}
loopy();