以下代码在数组上使用foreach,如果值是数组,则在嵌套数组中为每个执行一次
foreach ($playfull as $a)
{
if (is_array($a))
{
foreach ($a as $b)
{
print($b);
print("<p>");
}
} else {
print($a);
print("<p>");
}
}
这只有在您知道数组可能只嵌套一层深度
时才有效如果数组可以嵌套未知数量的级别,您如何获得相同的结果? (期望的结果是打印每个数组中每个键的值,无论它们有多深的嵌套)
答案 0 :(得分:1)
您可以使用array_walk_recursive
。例如:
array_walk_recursive($array, function (&$val)
{
print($val);
}
这个函数是PHP内置函数,它很简短。
答案 1 :(得分:0)
使用递归函数(即调用自身的函数):
function print_array_recursively($a)
{
foreach ($a as $el)
{
if (is_array($el))
{
print_array_recursively($el);
}
else
{
print($el);
}
}
}
这就是print_r
可以这样做的方式(见评论)。
答案 2 :(得分:0)
你想使用递归,你想在你找到一个数组时调用你自己的打印函数,click here to see an example
$myArray = array(
"foo",
"bar",
"children" => array(
"biz",
"baz"),
"grandchildren" => array(
"bang" => array(
"pow",
"wow")));
function print_array($playfull)
{
foreach ($playfull as $a)
{
if (is_array($a))
{
print_array($a);
} else {
echo $a;
echo "<p>";
}
}
}
echo "Print Array\n";
print_array($myArray);
答案 3 :(得分:0)
试试这个 -
function array_iterate($arr, $level=0, $maxLevel=0)
{
if (is_array($arr))
{
// unnecessary for this conditional to enclose
// the foreach loop
if ($maxLevel < ++$level)
{ $maxLevel = $level; }
foreach($arr AS $k => $v)
{
// for this to work, the result must be stored
// back into $maxLevel
// FOR TESTING ONLY:
echo("<br>|k=$k|v=$v|level=$level|maxLevel=$maxLevel|");
$maxLevel= array_iterate($v, $level, $maxLevel);
}
$level--;
}
// the conditional that was here caused all kinds
// of problems. so i got rid of it
return($maxLevel);
}
$array[] = 'hi';
$array[] = 'there';
$array[] = 'how';
$array['blobone'][] = 'how';
$array['blobone'][] = 'are';
$array['blobone'][] = 'you';
$array[] = 'this';
$array['this'][] = 'is';
$array['this']['is'][] = 'five';
$array['this']['is']['five'][] = 'levels';
$array['this']['is']['five']['levels'] = 'deep';
$array[] = 'the';
$array[] = 'here';
$var = array_iterate($array);
echo("<br><br><pre>$var");
答案 4 :(得分:0)
您可以使用递归函数,但最大深度将由最大嵌套限制确定(请参阅此SO问题Increasing nesting functions calls limit,以获取有关增加该函数的详细信息)
以下是一个例子:
$array = array(1,array(2,3,array(4,5)),6,7,8);
function printArray($item)
{
foreach ($item as $a)
{
if (is_array($a))
{
printArray($a);
} else {
print($a);
print("<p>");
}
}
}
printArray($array);
我希望有所帮助。