>  기사  >  백엔드 개발  >  PHP和MYSQL的算法疑问

PHP和MYSQL的算法疑问

WBOY
WBOY원래의
2016-06-06 20:28:331269검색

已知表t1

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

希望通过一次查询

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

经过php对数据的重新排列

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

得到如下结构的数据

<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>

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

回复内容:

已知表t1

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

希望通过一次查询

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

经过php对数据的重新排列

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

得到如下结构的数据

<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>

这个过程中的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>

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 '
';

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>

<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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.