这样简单否$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": []
}
]
解决方案 »
- 如何从编码过的url中通过get获取参数
- 关于如何获取下拉框循环出来的值的id
- 注册页面碰到难题》》》》》》。。。。
- PHP数据输出
- 请问用PHP是否可以实现生产者消费者的问题?
- 服务器中的mysql启动正常,但是程序就是不能连接,为什么?
- 用socket如何编写下列http://211.100.115.37/lxd/liuyue.php?username=try2&password=060621&birth=19530528&length=70的HTTP协议的POST
- 关于接口的用法问题
- 请问如何修改文本数据库指定行内容.
- 我想学习PHP,请教如何配置PHP环境!
- 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;
}
}
}
}