我能够遍历多维数组,但我还需要有关依赖项的信息。这是我想要做的。我有一个像这样的数组:
array(
'top1' => 'sth',
'top2' => array(
'sub1' => 'sth',
'sub2' => array(
'line1' => 'sth',
'line2' => 'sth'
)
)
'top3' => 'sth'
)
我能够遍历数组以获取所有键,结果是:
array([0] => 'top1', [1] => 'top2', [2] => 'sub1', [3] => 'sub2', ...)
但是,我需要知道当前元素的父元素。所以我希望我能得到这样的东西:
array(
[top1] => array('parent' => 0, 'id' => 1),
[top2] => array('parent' => 0, 'id' => 2),
[sub1] => array('parent' => 2, 'id' => 2.1),
[sub2] => array('parent' => 2, 'id' => 2.2),
[line1] => array('parent' => 2.2, 'id' => 2.2.1),
...
[top3] => array('parent' => 0, 'id' => 3)
)
我一直在尝试很多方法,但不能总是得到正确的结果。有谁能解决这个问题?谢谢!
答案 0 :(得分:1)
这是一个适合您的工作示例
function traverse(array $input, $parent = null) {
$result = array();
$current = 1;
foreach ($input as $key => $value) {
$id = null !== $parent ? $parent . '.' . $current : $current;
$result[$key] = array('parent' => null !== $parent ? $parent : 0, 'id' => $id);
if (is_array($value)) {
$result = array_merge($result, traverse($value, $id));
}
$current++;
}
return $result;
}
$input = array(
'top1' => 'sth',
'top2' => array(
'sub1' => 'sth',
'sub2' => array(
'line1' => 'sth',
'line2' => 'sth'
)
),
'top3' => 'sth'
);
echo '<pre>';
print_r($input);
echo '<hr>';
print_r(traverse($input));
echo '</pre>';