【问题标题】:PHP Nested arrays with while inside while loopPHP嵌套数组在while循环中
【发布时间】:2016-04-10 12:45:25
【问题描述】:

我正在努力实现以下目标:

Array (
    [1] => Array (
        [0] => 1
        [1] => 2
    )
    [3] => Array (
        [0] => 5
    )
    [2] => Array (
        [0] => 3
    )
)

这是我当前的代码:

function create_role_node_array()
{
    if($_SESSION['userid'])
    {
        $query1 = "SELECT * FROM auth_user_role_relation_list WHERE user_id='".$_SESSION['userid']."' ORDER BY creation_time ASC";
        $result1 = mysqli_query($GLOBALS['c'], $query1);
        $rows='';
        $data=array();
        if(!empty($result1))
            $rows=mysqli_num_rows($result1);
        else
            $rows='';
        if(!empty($rows))
        {
            while($rows=mysqli_fetch_assoc($result1))
            {
                $query2 = "SELECT * FROM auth_node_role_relation_list WHERE role_id='".$rows['role_id']."' ORDER BY group_id ASC, creation_time ASC";
                $result2 = mysqli_query($GLOBALS['c'], $query2);
                $rows2='';
                $data2=array();
                if(!empty($result2))
                    $rows2=mysqli_num_rows($result2);
                else
                    $rows2='';
                if(!empty($rows2))
                {
                    while($rows2=mysqli_fetch_assoc($result2))
                    {
                        $data2[0].=$rows2['node_id'];
                    }
                }
                $data[$rows['role_id']].=$data2[0];
            }
            return $data;
        }
    }
}
print_r(create_role_node_array());

我目前得到的结果:

Array ( [1] => 12 [3] => 5 [2] => 3 )

第一个 Array 部分中的这 12 个实际上是两个彼此相邻的单独结果。

我在这里查看了其他主题,但没有一个可以应用于我的案例。谁能知道这里的解决方案?任何帮助表示赞赏。

【问题讨论】:

    标签: php arrays mysqli while-loop nested


    【解决方案1】:

    试试这个;

    <?php
       function create_role_node_array()
    {
        if($_SESSION['userid'])
        {
            $query1 = "SELECT * FROM auth_user_role_relation_list WHERE user_id='".$_SESSION['userid']."' ORDER BY creation_time ASC";
            $result1 = mysqli_query($GLOBALS['c'], $query1);
            $rows='';
            $data=array();
            if(!empty($result1))
                $rows=mysqli_num_rows($result1);
            else
                $rows='';
            if(!empty($rows))
            {
                while($rows=mysqli_fetch_assoc($result1))
                {
                    $query2 = "SELECT * FROM auth_node_role_relation_list WHERE role_id='".$rows['role_id']."' ORDER BY group_id ASC, creation_time ASC";
                    $result2 = mysqli_query($GLOBALS['c'], $query2);
                    $rows2='';
                    $data2=array();
                    if(!empty($result2))
                        $rows2=mysqli_num_rows($result2);
                    else
                        $rows2='';
                    if(!empty($rows2))
                    {
                        $i=0;
                        while($rows2=mysqli_fetch_assoc($result2))
                        {
                            $data2[]=$rows2['node_id'];
                            $i++;
                        }
                    }
                    $data[$rows['role_id']]=$data2;
                    unset($data2);
                }
                return $data;
            }
        }
    }
    print_r(create_role_node_array());
    

    【讨论】:

    • 您的代码产生了以下结果:Array ( [1] =&gt; Array [3] =&gt; Array [2] =&gt; Array )
    • 我编辑了,你能再试一次吗?我还将$data[$rows['role_id']].=$data2; 更改为$data[$rows['role_id']]=$data2;
    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 2012-07-24
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多