这样简单否$ar = array(
array('id' => 1, 'name' => '0'),
array('id' => 2, 'name' => '00'),
array('id' => 3, 'name' => '000'),
array('id' => 4, 'name' => '001'),
array('id' => 5, 'name' => '1'),
array('id' => 6, 'name' => '10'),
array('id' => 7, 'name' => '100'),
array('id' => 8, 'name' => '2'),
);
$res = array();foreach($ar as $v) {
$p =& $res;
foreach(str_split($v['name']) as $k) {
if(isset($res[$k])) $p =& $p[$k]['children'];
$p[$k] = $v;
$p[$k]['children'] = array();
}
}echo json_encode($res, JSON_PRETTY_PRINT);[
{
"id": 1,
"name": "0",
"children": [
{
"id": 4,
"name": "001",
"children": [
{
"id": 4,
"name": "001",
"children": []
},
{
"id": 4,
"name": "001",
"children": []
}
]
}
]
},
{
"id": 5,
"name": "1",
"children": {
"1": {
"id": 7,
"name": "100",
"children": []
},
"0": {
"children": [
{
"id": 7,
"name": "100",
"children": [
{
"id": 7,
"name": "100",
"children": []
}
]
}
]
}
}
},
{
"id": 8,
"name": "2",
"children": []
}
]
array('id' => 1, 'name' => '0'),
array('id' => 2, 'name' => '00'),
array('id' => 3, 'name' => '000'),
array('id' => 4, 'name' => '001'),
array('id' => 5, 'name' => '1'),
array('id' => 6, 'name' => '10'),
array('id' => 7, 'name' => '100'),
array('id' => 8, 'name' => '2'),
);
$res = array();foreach($ar as $v) {
$p =& $res;
foreach(str_split($v['name']) as $k) {
if(isset($res[$k])) $p =& $p[$k]['children'];
$p[$k] = $v;
$p[$k]['children'] = array();
}
}echo json_encode($res, JSON_PRETTY_PRINT);[
{
"id": 1,
"name": "0",
"children": [
{
"id": 4,
"name": "001",
"children": [
{
"id": 4,
"name": "001",
"children": []
},
{
"id": 4,
"name": "001",
"children": []
}
]
}
]
},
{
"id": 5,
"name": "1",
"children": {
"1": {
"id": 7,
"name": "100",
"children": []
},
"0": {
"children": [
{
"id": 7,
"name": "100",
"children": [
{
"id": 7,
"name": "100",
"children": []
}
]
}
]
}
}
},
{
"id": 8,
"name": "2",
"children": []
}
]
解决方案 »
- php简单代码报错
- Linux下收不到POST参数
- 又是乱码问题,页面显示一堆问号啊.................
- 如何获取表单参数值!新手求救!
- 菜鸟之每日一问
- xp+apache2.2+php5.2.14配置下无法连接sqlserver2005
- 请教一个关于读取文件类型的问题!急!!!!!!!!!!
- 一个mysql数据库的问题啊,我都摸索两天了,还没解决,今天再不搞定我就死定了,哥哥姐姐帮帮我啊.55555555555555
- 关于serialize和unserialize的问题
- 请问在WIN98下装PHP4.0.4的问题呀
- php 将excel导入MySQL 数据库后,如何使得它以文本形式显示
- 本地回路127地址跳转到搜狗
琢磨了半天干脆用我的数据试,结果试不正确
然后再看这个代码,发现不是错的吗?
按照这里给出的$ar,结果应该是
[{
id:1
name:0,
children:[{
id:2,
name:00, //但是在这里就已经错了啊……
children:[...]
}]
}]
然后这个思路是什么?
1、遍历$ar,第一个foreach
2、将$v拆分(我的数据里面是两个一组,得用str_split($v['name'],2))
但是赋值这里怎么做?因为层数不一定,可能会出现name='000000000000'的情况
也就是说对于name='01234567',
isset($p[$k]) '01'
isset($p[$klast.$k]) '0123'
isset($p[$klastlast.$klast.$k]) '012345'
嗯……
可是看版主给出的代码却是分别判断
'01'
'23'
'45'
这样走的,不对嘛……这个地方就不对头了
foreach(str_split($v['name']) as $k) {
if(isset($res[$k])) $p =& $p[$k]['children'];
$p[$k] = $v;
$p[$k]['children'] = array();
}foreach(str_split($v['name'],2) as $k=>$dv){
if(isset($res[]))
....想不出来啊,因为name虽然看起来是数字,但是和索引没半点关系……
}
function px(&$point,&$data,&$i){
$nowl=strlen($data[$i]['dir']);
if(!sizeof($point)){
$now=$data[$i];
$point[]=$now;
$i++;
}
$flag=true;
while($flag && (sizeof($data)!=$i) ){
if($nowl==strlen($data[$i]['dir'])){
$now=$data[$i];
$point[]=$now;
$i++;
}else{
if($nowl < (strlen($data[$i]['dir'])) ){
$temp=array();
px($temp,$data,$i);
$point[sizeof($point)-1]['children']=$temp;
}else{
$flag=false;
}
}
}
}