我想在PHP中循环遍历一个数组。这个循环一定是递归的,因为我不知道数组中有多少个数组。它是用于在Symfony2中读取翻译。
输出格式为:
a.d.e
a.f.g
b.h.i
c.j.k.l.m
c.n.o
$array = array(
'a' => array('d' => 'e', 'f' => 'g'),
'b' => array('h' => 'i'),
'c' => array(
'j' => array(
'k' => array(
'l' => 'm')),
'n' => 'o'));
我已经尝试了以下操作,但这不是最终解决方案,但递归正在工作:
function displayArrayRecursively($array)
{
foreach ($array as $key => $value) {
if (is_array($value)) {
echo $key . '<br>';
displayArrayRecursively($value);
} else {
echo $key . '<br>' . $value . '<br>';
}
}
}
提前感谢!
我猜你的函数只是输出
a
d
e
...
应该这样做:
displayArrayRecursively($array, null);
function displayArrayRecursively($array, $keysString = '')
{
if (is_array($array)) {
foreach ($array as $key => $value) {
displayArrayRecursively($value, $keysString . $key . '.');
}
} else {
echo $keysString . $array . '<br/> ';
}
}
应该很接近你需要的。
这个函数做你想做的:
function displayArrayRecursively($array, $tree = array()) {
foreach ($array as $key => $value) {
if (is_array($value)) {
displayArrayRecursively($value, array_merge($tree, array($key)));
} else {
print implode('.', array_merge($tree, array($key, $value)));
print "'n<br />";
}
}
}
输出:a.d.e
a.f.g
b.h.i
c.j.k.l.m
c.n.o
您想要的功能
function displayArrayRecursively($array, $parent = '')
{
foreach ($array as $key => $value) {
if (is_array($value)) {
if(count($value) == 1 && !empty($parent))
$key = $parent . $key;
displayArrayRecursively($value, $key);
} else {
echo $parent;
echo $key . $value . '<br>';
}
}
}