在PHP多维数组中返回其父节点的所有节点值

时间:2019-05-31 15:36:22

标签: php multidimensional-array

我有一个简单的多维数组,如下所示: `

$array= [
    'A' => [
        'B' => ['D', 'E', 'F'],
    'C' => 'G',
    ],
];

我需要与他们的父母一起返回所有节点值。所以我需要这样的输出:

P[A] = 0;
P[B] = A;
P[D] = B;
P[E] = B;
P[F] = B;
P[C] = A;
P[G] = C;

我尝试了一些功能,例如array_search()array_walk_recursive等,但是无法将这些功能应用于我的情况。 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

<!doctype html>
<html>
<head>
  <script type="application/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script type="application/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
</head>
<body>
  <table id="example"></table>
</body>
</html>

答案 1 :(得分:0)

您可以使用递归函数来实现此目的,该函数具有“ parent”作为可选的第二个参数。

$array = [
    'A' => [
        'B' => [ 'D', 'E', 'F' ],
        'C' => 'G',
    ],
];

function showParents($arr, $parent = 0) {
    foreach($arr as $key => $val) {
        if(is_array($val)) {
            // for when the element is an array
            echo '[' . $key . '] ' . $parent . '<br>';
        } else if(is_int($key)){
            // for when the array is an not-associative one (or are you using INTs as keys also?)
            echo '[' . $val . '] ' . $parent . '<br>';
        } else if(is_string($val)){
            // for when the value is a string ('C' => 'G')
            echo '[' . $key . '] ' . $parent . '<br>';// display parent of C
            echo '[' . $val . '] ' . $key . '<br>';// display parent of G
        }

        if(is_array($val)) {
            // when the current value is an array, go deeper
            showParents($val, $key);
        }
    }
}

showParents($array);

显示:

[A] 0
[B] A
[D] B
[E] B
[F] B
[C] A
[G] C