这段php代码是不会运行的,这段php代码怎么个执行逻辑,没看懂请教一下?

foreach ($items as $item){

$items[$item['pid']] ['son'][$item['id']] = &$items[$item['id']];

}

第一次运行的时候$item['pid'] = 0,我们知道$items是从下标1开始的,也就是说第一次运行添加了下标为0的数组(不知道为什么在数组的最下边)。

并且$items[0][son][1]与$items[1]是传址关系。对其中一个操作会影响另一个。

array(8) {

[1]=>

&array(3) {

["id"]=>

int(1)

["pid"]=>

int(0)

["name"]=>

string(9) "北京市"

}

[2]=>

array(3) {

["id"]=>

int(2)

["pid"]=>

int(0)

["name"]=>

string(12) "黑龙江省"

}

[3]=>

array(3) {

["id"]=>

int(3)

["pid"]=>

int(1)

["name"]=>

string(9) "海淀区"

}

[4]=>

array(3) {

["id"]=>

int(4)

["pid"]=>

int(2)

["name"]=>

string(12) "哈尔滨市"

}

[6]=>

array(3) {

["id"]=>

int(6)

["pid"]=>

int(3)

["name"]=>

string(12) "清华大学"

}

[5]=>

array(3) {

["id"]=>

int(5)

["pid"]=>

int(2)

["name"]=>

string(9) "鸡西市"

}

[7]=>

array(3) {

["id"]=>

int(7)

["pid"]=>

int(3)

["name"]=>

string(12) "北京大学"

}

[0]=> 这里添加了一个元素

array(1) {

["son"]=>

array(1) {

[1]=>

&array(3) {

["id"]=>

int(1)

["pid"]=>

int(0)

["name"]=>

string(9) "北京市"

}

}

}

}

-------------------------------------------------------------

第二次运行的时候$item['pid'] = 0,并且$item['id']是不同的,即会为$items[0]['son']添加一个元素。

[0]=>

array(1) {

["son"]=>

array(2) {

[1]=>

&array(3) {

["id"]=>

int(1)

["pid"]=>

int(0)

["name"]=>

string(9) "北京市"

}

[2]=>

&array(3) {

["id"]=>

int(2)

["pid"]=>

int(0)

["name"]=>

string(12) "黑龙江省"

}

}

}

}

-------------------------------------------------------------

第三次运行的时候$item['pid'] = 1,此时$items[1]是存在的,也就是说会将$items[$item['id']]元素添加到$items[1]['son']中。又因为$items[1]跟$items[0]['son'][1]是传址关系,即也会添加到$items[0]['son'][1];$items[0]['son']就是我们要的结果数组;之后同理

array(8) {

[1]=>

&array(4) {

["id"]=>

int(1)

["pid"]=>

int(0)

["name"]=>

string(9) "北京市"

["son"]=>

array(1) {

[3]=>

&array(3) {

["id"]=>

int(3)

["pid"]=>

int(1)

["name"]=>

string(9) "海淀区"

}

}

}

[2]=>

&array(3) {

["id"]=>

int(2)

["pid"]=>

int(0)

["name"]=>

string(12) "黑龙江省"

}

[3]=>

&array(3) {

["id"]=>

int(3)

["pid"]=>

int(1)

["name"]=>

string(9) "海淀区"

}

[4]=>

array(3) {

["id"]=>

int(4)

["pid"]=>

int(2)

["name"]=>

string(12) "哈尔滨市"

}

[6]=>

array(3) {

["id"]=>

int(6)

["pid"]=>

int(3)

["name"]=>

string(12) "清华大学"

}

[5]=>

array(3) {

["id"]=>

int(5)

["pid"]=>

int(2)

["name"]=>

string(9) "鸡西市"

}

[7]=>

array(3) {

["id"]=>

int(7)

["pid"]=>

int(3)

["name"]=>

string(12) "北京大学"

}

[0]=>

array(1) {

["son"]=>

array(2) {

[1]=>

&array(4) {

["id"]=>

int(1)

["pid"]=>

int(0)

["name"]=>

string(9) "北京市"

["son"]=>

array(1) {

[3]=>

&array(3) {

["id"]=>

int(3)

["pid"]=>

int(1)

["name"]=>

string(9) "海淀区"

}

}

}

[2]=>

&array(3) {

["id"]=>

int(2)

["pid"]=>

int(0)

["name"]=>

string(12) "黑龙江省"

}

}

}

}

return isset($items[0]['son']) ? $items[0]['son'] : array();

通过之前的分析这边就好理解了。就是将$items[0]['son']返回回去

调试

function genTree5($items) {

foreach ($items as $item){

$items[$item['pid']] ['son'][$item['id']] = &$items[$item['id']];

echo "

";

var_dump($items);

echo '-------------------------------------------------------------';

}

return isset($items[0]['son']) ? $items[0]['son'] : array();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值