PHP找到多维数组的依赖关系

时间:2012-10-03 12:49:41

标签: php arrays recursion multidimensional-array

我能够遍历多维数组,但我还需要有关依赖项的信息。这是我想要做的。我有一个像这样的数组:

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)
)

我一直在尝试很多方法,但不能总是得到正确的结果。有谁能解决这个问题?谢谢!

1 个答案:

答案 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>';