不遗留问题menu数据拼装

 1 DROP TABLE IF EXISTS `menu0910`;
 2 CREATE TABLE `menu0910` (
 3   `id` bigint(20) NOT NULL AUTO_INCREMENT,
 4   `menu` varchar(50) COLLATE utf8_unicode_ci DEFAULT '',
 5   `parentid` bigint(20) DEFAULT '0',
 6   PRIMARY KEY (`id`)
 7 ) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 8 
 9 -- ----------------------------
10 -- Records of menu0910
11 -- ----------------------------
12 INSERT INTO `menu0910` VALUES ('1', '1-1', '0');
13 INSERT INTO `menu0910` VALUES ('2', '1-2', '0');
14 INSERT INTO `menu0910` VALUES ('3', '1-3', '0');
15 INSERT INTO `menu0910` VALUES ('4', '1-1-1', '1');
16 INSERT INTO `menu0910` VALUES ('5', '1-1-2', '1');
17 INSERT INTO `menu0910` VALUES ('6', '1-1-3', '1');
18 INSERT INTO `menu0910` VALUES ('7', '1-2-1', '2');
19 INSERT INTO `menu0910` VALUES ('8', '1-2-2', '2');
20 INSERT INTO `menu0910` VALUES ('9', '1-2-3', '2');
21 INSERT INTO `menu0910` VALUES ('10', '1-3-1', '3');
22 INSERT INTO `menu0910` VALUES ('11', '1-3-2', '3');
23 INSERT INTO `menu0910` VALUES ('12', '1-3-3', '3');
24 INSERT INTO `menu0910` VALUES ('13', '1-1-1-1', '4');
25 INSERT INTO `menu0910` VALUES ('14', '1-1-1-2', '4');
26 INSERT INTO `menu0910` VALUES ('15', '1-1-1-3', '4');
27 INSERT INTO `menu0910` VALUES ('16', '1-1-2-1', '5');
28 INSERT INTO `menu0910` VALUES ('17', '1-1-2-2', '5');
29 INSERT INTO `menu0910` VALUES ('18', '1-1-2-3', '5');
30 INSERT INTO `menu0910` VALUES ('19', '1-1-3-1', '6');
31 INSERT INTO `menu0910` VALUES ('20', '1-1-3-2', '6');
32 INSERT INTO `menu0910` VALUES ('21', '1-1-3-3', '6');
33 INSERT INTO `menu0910` VALUES ('22', '1-2-1-1', '7');
34 INSERT INTO `menu0910` VALUES ('23', '1-2-1-2', '7');
35 INSERT INTO `menu0910` VALUES ('24', '1-2-1-3', '7');
36 INSERT INTO `menu0910` VALUES ('25', '1-2-2-1', '8');
37 INSERT INTO `menu0910` VALUES ('26', '1-2-2-2', '8');
38 INSERT INTO `menu0910` VALUES ('27', '1-2-2-3', '8');
39 INSERT INTO `menu0910` VALUES ('28', '1-2-3-1', '9');
40 INSERT INTO `menu0910` VALUES ('29', '1-2-3-2', '9');
41 INSERT INTO `menu0910` VALUES ('30', '1-2-3-3', '9');
42 INSERT INTO `menu0910` VALUES ('31', '1-3-1-1', '10');
43 INSERT INTO `menu0910` VALUES ('32', '1-3-1-2', '10');
44 INSERT INTO `menu0910` VALUES ('33', '1-3-1-3', '10');
45 INSERT INTO `menu0910` VALUES ('34', '1-3-2-1', '11');
46 INSERT INTO `menu0910` VALUES ('35', '1-3-2-2', '11');
47 INSERT INTO `menu0910` VALUES ('36', '1-3-2-3', '11');
48 INSERT INTO `menu0910` VALUES ('37', '1-3-3-1', '12');
49 INSERT INTO `menu0910` VALUES ('38', '1-3-3-2', '12');
50 INSERT INTO `menu0910` VALUES ('39', '1-3-3-3', '12');
<?php
$mysqli = new mysqli('localhost', 'root', '', 'w');

if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$menulist = array();
/* Select queries return a resultset */
if ($result = $mysqli->query("SELECT * FROM menu0910")) {
    printf("Select returned %d rows.\n", $result->num_rows);

    /* free result set */

    while ($row = $result->fetch_assoc()) {
        $menulist[] = $row;
    }

    $result->close();
}

var_dump($menulist);

//筛选出3级idlist->2级->1级
$idlist_3 = array();
$idlist_2 = array();
$idlist_1 = array();
$idlist_1_2_3 = array();
$idlist_1_2 = array();
foreach($menulist as $menu)
{
    $idlist_1_2_3[] = $menu['id'];
}
var_dump($idlist_1_2_3);
foreach($menulist as $menu)
{
    if($menu['parentid']!=0)$idlist_1_2[] = $menu['parentid'];
}
$idlist_1_2=array_unique($idlist_1_2);
var_dump($idlist_1_2);
foreach($idlist_1_2_3 as $id)
{
    if(!in_array($id,$idlist_1_2)) $idlist_3[] = $id;
}
var_dump($idlist_3);
foreach($idlist_3 as $id)
{
    $idlist_2[] = get_parentid($id);
}
$idlist_2=array_unique($idlist_2);
var_dump($idlist_2);

foreach($idlist_2 as $id)
{
    $idlist_1[] = get_parentid($id);
}
$idlist_1=array_unique($idlist_1);
var_dump($idlist_1);


function get_parentid($id)
{
    global $menulist;
    foreach($menulist as $one)
    {
        if($one['id']==$id) RETURN $one['parentid'];
    }
}

$res = array();
foreach($idlist_1 as $one)
{
    $res[] = $one;
}
var_dump($res);

$w = 0;
foreach($res as $id1)
{
    $tmp = array();
    foreach($idlist_2 as $id2)
    {
       if(get_parentid($id2) == $id1)$tmp[]=$id2;
    }
    $res[]=$tmp;
}
var_dump($res);
原文地址:https://www.cnblogs.com/rsapaper/p/5928385.html