php - 如何从数据库构建 "child-parent"树/嵌套数组?

标签 php mysql arrays

TABLE `people`
+----+------------+-------+
| sn | name       | upper |
+----+------------+-------+
|  1 | Clement    |     0 |
|  2 | Jean       |     1 |
|  3 | Annie      |     1 |
|  4 | Yuan       |     2 |
|  5 | Mei        |     2 |
|  6 | Blue       |     3 |
|  7 | Yang       |     5 |
|  8 | Lorinda    |     0 |
+----+------------+-------+

结构如下:

Clement
    Jean
        Yuan
        Mei
            Yang
    Annie   
        Blue
Lorinda

upper表示他/她自己的上层人物。

问题是:如何从 MySQL 获取嵌套/多维数组? 我以为我可以使用循环来获取,但我未能自动获取所有下层。 数组可能是这样的:

Array
(
    [1]=>Array
    (
        [self]=>Clement
        [2]=>Array
        (
            [self]=>Jean
            [4]=>Array
            (
                [self]=>Yuan
            )
            [5]=>Array
            (
                [self]=>Mei
                [7]=>Array
                (
                    [self]=>Yang
                )
            )
        )
        [3]=>Array
        (
            [self]=>Annie
            [6]=>Array
            (
                [self]=>Blue
            )
        )
    )
    [8]=>Array
    (
        [self]=>Lorinda
    )
)

由于我们不知道一个人有多少个“上层”人,因此解决方案应该是构建一个完整数组的自动化函数,而不仅仅是三维或四维数组。 也就是说,功能要从高层深入到所有下层。

最佳答案

鉴于您的输入为:

$input = array(
  array('sn' => 1, 'name' => 'Clement', 'upper' => 0),
  array('sn' => 2, 'name' => 'Jean',    'upper' => 1),
  array('sn' => 3, 'name' => 'Annie',   'upper' => 1),
  array('sn' => 4, 'name' => 'Yuan',    'upper' => 2),
  array('sn' => 5, 'name' => 'Mei',     'upper' => 2),
  array('sn' => 6, 'name' => 'Blue',    'upper' => 3),
  array('sn' => 7, 'name' => 'Yang',    'upper' => 5),
  array('sn' => 8, 'name' => 'Lorinda', 'upper' => 0),
);

使用 references您可以使用以下循环构建一棵树:

$map = array();

foreach ($input as $node) {
  // init self
  if (!array_key_exists($node['sn'], $map)) {
    $map[$node['sn']] = array('self' => $node['name']);
  }
  else {
    $map[$node['sn']]['self'] = $node['name'];
  }

  // init parent
  if (!array_key_exists($node['upper'], $map)) {
    $map[$node['upper']] = array();
  }

  // add to parent
  $map[$node['upper']][$node['sn']] = & $map[$node['sn']];
}

print_r($map[0]);

演示:http://3v4l.org/vuVPu

关于php - 如何从数据库构建 "child-parent"树/嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25280265/

相关文章:

mysql - Rails 无法识别遗留数据库中的 bool 字段

PHP move_uploaded_file 文件系统

mysql - 添加两个独立表的SUM

PHP:为具有嵌套关联数组的对象公开 'get' 和 'set'

javascript - 循环遍历数组内的数组以确定值

php - 本地化是事后的想法——搞砸了吗?

php - 如何将 PHP 数组中的最后 n 项作为另一个数组获取?

php - 输入键以保存文本区域值

php - 带有 php 支付页面的 ssl

c# - C# 和 VB 中的锯齿状数组 CLS 合规性不同?