Log in

View Full Version : printing out multidimensional array



boogyman
02-27-2007, 06:19 PM
Hi I am trying to print out the contents of an array, I cannot seem to get it to print the lower levels. In the end I want to make it so the "levels" are clickable links and if there is an sublevel array associated with that value to that it will display the lower level keys... etc etc... i understand I am going to need a new loop, but i cannot seem to get a grasp on how to accomplish this.. Thanks


$arr = array(
"level1" => array(
"level2", "level2", "level2", "level2", "level2" => array(
"level3", "level3", "level3"
),
"level2", "level2" => array(
"level3", "level3" => array(
"level4", "level4" => array(
"level5", "level5", "level5", "level5"
),
"level4", "level4"
),
),
"level2", "level2"
),
"level1", "level1", "level1"
);


print "<ul>\n";
foreach($arr as $key) {
echo "\t<li>".$key." - ".$value."</li>\n";
}
print "</ul>";

Twey
02-27-2007, 06:36 PM
You need a recursive function, something like:
function show_arr($arr, $lvl = 0) {
$padding = '';
for($i = 0; $i < $lvl; ++$i)
$padding .= "\t";

print "$padding<ul>\n";
if(is_array($arr))
show_arr($arr, $lvl + 1);
else
print "$padding\t<li>$key - $value</li>\n";
print "$padding</ul>\n";
}

boogyman
02-27-2007, 06:57 PM
lol wow now I feel dumb. thanks twey, but its giving me an error, as its not finding the array. I have attempted to pass in the array name, and different level's in but neither of them will allow me to print anything but the "-" between the key and value

Twey
02-27-2007, 07:15 PM
Sorry, my error:
function show_arr($arr, $lvl = 0) {
$padding = '';
for($i = 0; $i < $lvl; ++$i)
$padding .= "\t";

print "$padding<ul>\n";
foreach($arr as $key => $val)
if(is_array($val))
show_arr($arr, $lvl + 1);
else
print "$padding\t<li>$key - $val</li>\n";
print "$padding</ul>\n";
}There's generally no need to modify $lvl, it's used internally.

boogyman
02-27-2007, 07:28 PM
its still not recognizing the array... its lagging the system and blowing up the cpu usage :/

Twey
02-27-2007, 08:44 PM
function show_arr($arr, $lvl = 0) {
$padding = '';
for($i = 0; $i < $lvl; ++$i)
$padding .= "\t";

print "$padding<ul>\n";
foreach($arr as $key => $val)
if(is_array($val))
show_arr($val, $lvl + 1);
else
print "$padding\t<li>$key - $val</li>\n";
print "$padding</ul>\n";
}The joy of typos.