【问题标题】:hierarchial two dimetional php array from an two dimetional php来自二维 php 的分层二维 php 数组
【发布时间】:2017-09-17 16:10:59
【问题描述】:

我有一个包含所有用户的多维数组,如下所示。

Array
(
    [0] => Array
        (
            [username] => santoshe62
            [sponsor] => santoshe61
        )

    [1] => Array
        (
            [username] => santoshe63
            [sponsor] => santoshe62
        )
    [2] => Array
         (
            [username] => santoshe65
            [sponsor] => santoshe64
        )
    [3] => Array
         (
            [username] => santoshe67
            [sponsor] => santoshe66
        )
     .............................
)

我想要这个数组中的一个数组,其中包含给定用户的分层数据,如下所示。

Array
(
    [0] => Array
        (
            [username] => santoshe62
            [sponsor] => santoshe61
        )

    [1] => Array
        (
            [username] => santoshe63
            [sponsor] => santoshe62
        )

)

我试过了

function parseTree($datas, $parent = 0){
    $tree = array();
    for($i=0, $ni=count($datas); $i < $ni; $i++){
        if($datas[$i]['sponsor'] == $parent){
            $tree[] = $datas[$i];
            parseTree($datas, $datas[$i]['username']);
        }
    }
    return $tree;
}

谁能帮我找出我的代码有什么问题?另外请建议,我可以直接从 MySQL 中选择这种层次结构吗?现在我正在从 DB 中选择所有结果。

【问题讨论】:

  • 我想要这个数组中包含分层数据的数组是什么意思?第二个多维数组背后的逻辑是什么?
  • 表示包含所有孩子、孙子、曾孙等的数组......对于任何给定的用户名,例如用户名“santoshe61”的第二个给定数组

标签: php mysql arrays multidimensional-array hierarchical-data


【解决方案1】:

问题是因为你的函数中的这个语句,$tree = array();。在每个递归函数调用中,这个 $tree 被初始化为一个空数组。您必须将其声明为 static 变量,以便它可以只被初始化一次,并且可以在递归函数调用中保持其状态。

function parseTree($datas, $parent = 0){
    static $tree = array();
    ...
} 

【讨论】:

  • 谢谢哥们,可以直接从MYSQL db中用查询或过程选择还是会更好?
  • @santosh 我不认为这种(动态)分层数据可以仅通过使用 SQL 查询来生成。但是,您可以在遍历结果集的同时直接构造这种数组。
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多