在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
)
}
任何想法?感谢。
答案 0 :(得分:4)
您可以使用is_array检查该元素是否为数组,如果是,则递归循环。
答案 1 :(得分:4)
选择哪种方法取决于您要对数据执行的操作。
array_walk_recursive
[docs]允许您递归遍历数组数组。
答案 2 :(得分:1)
您可以使用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)
}
递归迭代器适用于多个深度级别。
答案 3 :(得分:0)
foreach( $array as $value ) {
if( is_array( $value ) ) {
foreach( $value as $innerValue ) {
// do something
}
}
}
如果您知道最多2级嵌套数组,那将会有效。如果您不知道嵌套的级别,那么您将需要使用递归。或者您可以使用array_walk_recursive
等功能答案 4 :(得分:0)
$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();