【问题标题】:How to unload a PHP array in a tree format?如何以树格式卸载 PHP 数组?
【发布时间】:2014-01-20 19:39:58
【问题描述】:

我有那个基于用户 1014 的数组。所以就像金字塔一样,我想用分别在 1014 之后出现的用户来呼应一棵树。

喜欢:

$arr = array(

        1005 => 1014,
        1008 => 1014,

        1019 => 1008,
        1020 => 1008,
        1022 => 1005,
        1023 => 1005,
        );  

1014
- 1005
- 1022(这应该比 1005 缩进更多)
- 1023(这应该比 1005 缩进更多)
- 1008
- 1019(这应该比 1008 缩进更多)
- 1020(这应该比 1008 缩进更多)

1005 和 1008 来自 1014
1019 和 1020 来自 1008
1022和1023来自1005

等等……

我创建了一个从用户 id 到顶部的函数,但不知道相反...

function get_rede($id_winner) {

global $link;

$precednt = array();
$precednt_id = array();

$result = mysqli_query($link, "SELECT rede FROM users WHERE id = '$id_winner' ");

$row = mysqli_fetch_row($result);   
$rede = $row[0]; 

array_push($precednt, $rede);
array_push($precednt_id, $id_winner);

do {

$q_precednt = end($precednt); 

$result = mysqli_query($link, "SELECT rede FROM users WHERE id = '$q_precednt' ");

$row = mysqli_fetch_row($result);   
$rede = $row[0]; 

array_push($precednt, $rede);
array_push($precednt_id, $q_precednt);

}
while($rede != 1000);

return array($precednt,$precednt_id);
}

谢谢!

嗯,这就是我所追求的结果。想不出一个数组函数来帮助我。

【问题讨论】:

  • 你的问题伤了我的脑筋,很难读懂。请尝试更具体。并且更具体地说明哪个 part 不起作用。不要只是扔代码墙
  • Ronni,很抱歉伤害了你的大脑!格式化stackoverflow样式对我来说太难了...我只是没有代码,想不出...
  • 我仍然不确定你是如何尝试格式化你所拥有的——但我很高兴每个人都在 1014 岁以下,也就是 10-14 岁——但是,无论如何,\t 是“制表符”的字符 - 所以这可能会有所帮助......
  • 当前用户是1014,这是他的连接用户树。然后我需要他的完整关系树。
  • @LeandroCintrao:如果我能帮助你成为那种不厌其烦地整理帖子的行为端正的 Stack Overflow 公民,那将是非常建设性的。这不是您的免费个人帮助台。这是一个社区。​​span>

标签: php arrays


【解决方案1】:
<?php

$arr = array(
        1014 => 1003, 
        1003 => 1002, 
        1002 => 1000, 

        1005 => 1014,
        1008 => 1014,

        1019 => 1008,
        1020 => 1008,
        1022 => 1005,
        1023 => 1005,
        );

foreach ($arr as $key => $value) {
    $new_arr[$value][$key] = 1;
}

ksort($new_arr);

// here is your output 
$output = reorder($new_arr);

function reorder($new_arr)
{
    if (count($new_arr) == 1) return $new_arr;
    $tree_array = $new_arr;
    foreach ($new_arr as $key => $values) {
        foreach (array_keys($values) as $ak) {
            if (array_key_exists($ak, $new_arr)) {

                $values[$ak] = $new_arr[$ak];

                $tree_array[$key] = $values;
                unset($tree_array[$ak]);
            }
        }   
    }

    return reorder($tree_array);
}

这将输出:

Array
(
    [1000] => Array
        (
            [1002] => Array
                (
                    [1003] => Array
                        (
                            [1014] => Array
                                (
                                    [1005] => Array
                                        (
                                            [1022] => 1
                                            [1023] => 1
                                        )

                                    [1008] => Array
                                        (
                                            [1019] => 1
                                            [1020] => 1
                                        )

                                )

                        )

                )

        )

)

这假设你有一个根。

【讨论】:

  • Raj,我非常感谢你的方法,但这个数组可能会深入到 100 个用户。因此,如果将其他 4 1023 添加到数组中,它将不会显示。谢谢
  • 我从您的示例输入中假设,它没有。你可能需要做一些递归的事情。让我看看能不能再给个sn-p
  • Raj,我以为你明白了!不幸的是,当我像 $arr = array( 1005 => 1014, 1008 => 1014, 1019 => 1008, 1020 => 1008, 1022 => 1005, 1023 => 1005, 1031 => 1023, 1032 = > 1023, 1033 => 1023, 1034 => 1023, );我没有得到所有用户...
  • 很抱歉,希望您能开始
  • 不错的拉吉!会考虑用mysql来排序吧!还是谢谢你!
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多