PHP和MYSQL的算法疑问

WBOY
Release: 2016-06-06 20:28:33
Original
1228 people have browsed it

已知表t1

<code>    id     txt          parent
    --------------------------
    1      上山打老虎    0
    2      一二三四五    0
    3      老虎不在家    1
    4      啦啦啦啦啦    1
    5      啊啊啊啊啊    2
    6      嗯嗯恩恩恩    0
    .
    .
    .</code>
Copy after login
Copy after login

希望通过一次查询

<code>mysql_query("SELECT id,txt,parent FROM t1 ORDER BY id DESC")</code>
Copy after login
Copy after login

经过php对数据的重新排列

<code>这里的代码应该怎么写???</code>
Copy after login
Copy after login

得到如下结构的数据

<code><ul>
    <li id="6">
        <b>嗯嗯恩恩恩</b>
    </li>
    <li id="2">
        <b>一二三四五</b>
        <ul>
            <li id="5">
                <b>啊啊啊啊啊</b>
            </li>
        </ul>
    </li>
    <li id="1">
        <b>上山打老虎</b>
        <ul>
            <li id="4">
                <b>啦啦啦啦啦</b>
            </li>
            <li id="3">
                <b>老虎不在家</b>
            </li>
        </ul>
    </li>
</ul></code>
Copy after login
Copy after login

这个过程中的PHP处理代码或者算法应该怎么写?求指点。

回复内容:

已知表t1

<code>    id     txt          parent
    --------------------------
    1      上山打老虎    0
    2      一二三四五    0
    3      老虎不在家    1
    4      啦啦啦啦啦    1
    5      啊啊啊啊啊    2
    6      嗯嗯恩恩恩    0
    .
    .
    .</code>
Copy after login
Copy after login

希望通过一次查询

<code>mysql_query("SELECT id,txt,parent FROM t1 ORDER BY id DESC")</code>
Copy after login
Copy after login

经过php对数据的重新排列

<code>这里的代码应该怎么写???</code>
Copy after login
Copy after login

得到如下结构的数据

<code><ul>
    <li id="6">
        <b>嗯嗯恩恩恩</b>
    </li>
    <li id="2">
        <b>一二三四五</b>
        <ul>
            <li id="5">
                <b>啊啊啊啊啊</b>
            </li>
        </ul>
    </li>
    <li id="1">
        <b>上山打老虎</b>
        <ul>
            <li id="4">
                <b>啦啦啦啦啦</b>
            </li>
            <li id="3">
                <b>老虎不在家</b>
            </li>
        </ul>
    </li>
</ul></code>
Copy after login
Copy after login

这个过程中的PHP处理代码或者算法应该怎么写?求指点。

<code><?php header('Content-Type: text/plain;charset=utf-8');
$arr = array(
    array(1,'Web Server',0),
    array(2,'Database',  0),
    array(3,'Nginx',     1),
    array(4,'Apache',    1),
    array(5,'MySQL',     2),
    array(6,'Browser',   0),
);
$new = array();
foreach($arr as $v) {
    if($v[2]==0) {
        $new[$v[0]][$v[0]] = $v[1];
    } else {
        $new[$v[2]][$v[0]] = $v[1];
    }
}
print_r($new);
//输出:
Array
(
    [1] => Array
        (
            [1] => Web Server
            [3] => Nginx
            [4] => Apache
        )

    [2] => Array
        (
            [2] => Database
            [5] => MySQL
        )

    [6] => Array
        (
            [6] => Browser
        )

)</code>
Copy after login

Code

<code>/**
 * 无限子级递归循环
 * @param  [type]  $data [description]
 * @param  integer $pid  [description]
 * @return [type]        [description]
 */
function unlimitedForChild ($data, $pid = 0) {
    $array = array();
    foreach ($data as $value) {
        if ($value['parent'] == $pid) {
            $value['child'] = unlimitedForChild($data, $value['id']);
            $array[] = $value;
        }
    }
    return $array;
}

$data = array(
    array(
        'id' => 1,
        'txt' => '上山打老虎',
        'parent' => 0
    ),
    array(
        'id' => 2,
        'txt' => '一二三四五',
        'parent' => 0
    ),
    array(
        'id' => 3,
        'txt' => '老虎不在家',
        'parent' => 1
    ),
    array(
        'id' => 4,
        'txt' => '啦啦啦啦啦',
        'parent' => 1
    ),
    array(
        'id' => 5,
        'txt' => '啊啊啊啊啊',
        'parent' => 2
    ),
    array(
        'id' => 6,
        'txt' => '嗯嗯恩恩恩',
        'parent' => 0
    ),
    //附加3级
    array(
        'id' => 7,
        'txt' => '第三级',
        'parent' => 3
    ),
);

$result = unlimitedForChild($data);

echo '<pre class="brush:php;toolbar:false">';
print_r($result);
echo '
Copy after login
';

Result

<code>Array
(
    [0] => Array
        (
            [id] => 1
            [txt] => 上山打老虎
            [parent] => 0
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [txt] => 老虎不在家
                            [parent] => 1
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 7
                                            [txt] => 第三级
                                            [parent] => 3
                                            [child] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 4
                            [txt] => 啦啦啦啦啦
                            [parent] => 1
                            [child] => Array
                                (
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [txt] => 一二三四五
            [parent] => 0
            [child] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [txt] => 啊啊啊啊啊
                            [parent] => 2
                            [child] => Array
                                (
                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 6
            [txt] => 嗯嗯恩恩恩
            [parent] => 0
            [child] => Array
                (
                )

        )

)</code>
Copy after login

<code><?php $arr = [
    [1,'Web Server',0],
    [2,'Database',  0],
    [3,'Nginx',     1],
    [4,'Apache',    1],
    [5,'MySQL',     2],
    [6,'Browser',   0],
];
$new = array();
foreach($arr as $v) {
    if($v[2]==0) {
        $new[$v[0]]['name'] = $v[1];
    }else{
        $new[$v[2]]['sub'][$v[0]]['name'] = $v[1];
    }
}
print_r($new);
///////

Array
(
    [1] => Array
        (
            [name] => Web Server
            [sub] => Array
                (
                    [3] => Array
                        (
                            [name] => Nginx
                        )

                    [4] => Array
                        (
                            [name] => Apache
                        )

                )

        )

    [2] => Array
        (
            [name] => Database
            [sub] => Array
                (
                    [5] => Array
                        (
                            [name] => MySQL
                        )

                )

        )

    [6] => Array
        (
            [name] => Browser
        )

)</code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!