Heim >Backend-Entwicklung >PHP-Tutorial >求好的方法~?

求好的方法~?

WBOY
WBOYOriginal
2016-06-23 13:46:13811Durchsuche

数据如:

INSERT INTO `vm_nav` (`id`, `ctype`, `cid`, `name`, `ifshow`, `vieworder`, `opennew`, `url`, `type`) VALUES(1, NULL, 0, 'index', 0, 1, 0, '', 'nav'),(2, NULL, 0, 'product', 1, 2, 0, '', 'nav'),(3, NULL, 0, 'member', 1, 3, 0, '', 'nav'),(4, NULL, 0, 'guide', 1, 4, 0, '', 'nav'),(5, NULL, 0, 'kehu', 1, 5, 0, '', 'nav'),(6, NULL, 0, 'about', 1, 6, 0, '', 'nav'),(7, NULL, 0, 'tehui', 1, 7, 0, '', 'nav'),(8, NULL, 3, 'member_index', 1, 1, 0, '', 'nav'),(9, NULL, 3, 'member_info', 1, 2, 0, '', 'nav');


求这种数据
array(8) {  [0]=>  array(6) {    ["id"]=>    string(1) "2"    ["name"]=>    string(12) "product"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }  [1]=>  array(6) {    ["id"]=>    string(1) "3"    ["name"]=>    string(18) "member"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }  [2]=>  array(6) {    ["id"]=>    string(1) "8"    ["name"]=>    string(12) "member_index"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "3"  }  [3]=>  array(6) {    ["id"]=>    string(1) "9"    ["name"]=>    string(12) "member_info"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "3"  }  [4]=>  array(6) {    ["id"]=>    string(1) "4"    ["name"]=>    string(12) "guide"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }  [5]=>  array(6) {    ["id"]=>    string(1) "5"    ["name"]=>    string(12) "kehu"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }  [6]=>  array(6) {    ["id"]=>    string(1) "6"    ["name"]=>    string(12) "about"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }  [7]=>  array(6) {    ["id"]=>    string(1) "7"    ["name"]=>    string(12) "tehui"    ["opennew"]=>    string(1) "0"    ["url"]=>    string(0) ""    ["ctype"]=>    NULL    ["cid"]=>    string(1) "0"  }}


我用了一个笨办法:先foreach吧cid  插入到一个son成员里 然后再一个foreach 放到其后面,描述的不清楚,代码如下:

function nav_list(){    $navlist = get_navigator();    sort($navlist['nav']);   //$navlist['nav']  就是取出所有数据 ,上面用sort排了下序    foreach($navlist['nav'] as $k=>$v)    {        if($v['cid'] != 0)        {            //插入到一个son成员里            $l[$v['cid']]['son'][] = $v;                    }else{        	$l[$v['id']] = $v;        }    }    foreach($l as $k=>$v){        if($v['son']){            //消除son成员            $tmp[] = array_diff_key($v,array('son'=>''));            foreach($v['son'] as $key=>$val){                //再一个foreach 放到其后面                $tmp[] = $val;            }        }else{            $tmp[] = $v;        }    }    return $tmp;}


~ 怎么样会快捷一点 ~??? 求解


回复讨论(解决方案)

if(cid == id)
这条cid数据就放在id数据后面    说不清楚了~~~~

select id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid=0unionselect cid as id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid>0order by id

一位数组转化二维?

select id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid=0unionselect cid as id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid>0order by id


这样取出来的数据 cid在父id前面:如
INSERT INTO `vm_nav` (`id`, `ctype`, `cid`, `name`, `ifshow`, `vieworder`, `opennew`, `url`, `type`) VALUES(2, NULL, 0, 'product', 1, 2, 0, '', 'nav'),(3, NULL, 3, 'member_info', 1, 2, 0, '', 'nav'),(3, NULL, 3, 'member_index', 1, 1, 0, '', 'nav'),(3, NULL, 0, 'member', 1, 3, 0, '', 'nav'),(4, NULL, 0, 'guide', 1, 4, 0, '', 'nav'),(5, NULL, 0, 'kehu', 1, 5, 0, '', 'nav'),(6, NULL, 0, 'about', 1, 6, 0, '', 'nav'),(7, NULL, 0, 'tehui', 1, 7, 0, '', 'nav');

好像是我吧事情搞复杂了~   ~ 

一位数组转化二维?


嗯 ,但 一维数组中如果有cid则需要排在cid后面,cid可以理解为父节点的下标,根节点的cid=0~~~   大概就这个意思 ~

不应该的,排序键相同时是按自然顺序的

可带上 cid 排序
order by id, cid

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn