用是會用,但每次看的時候理解不了,誰能解釋清除麼? &引用賦值在這裡如何理解?
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
function getTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
主要是引用的使用,可以簡化下測:
有引用時:
無引用時:
有引用時子元素的改變都會在整個數組中展示出來,而無引用時,子元素的變動對整個數組沒有影響。
沒人麼,求解釋
是這樣的,
之後,foreach
括號中的items
=>a
和循環體中的items
=>b
在內存中存在兩個地方. 使用會指向
a即真正的
items.
但是在
php7foreach
變了一些 => php7 foreach 不向後相容特性
引用賦值,是說將賦值左邊的直接指向記憶體中儲存這個值的這塊區域,而不是開闢一塊新空間去接收資料的副本。
所以,在父子級別關係中,引用賦值直接將父元素中的
['son']
,直接指向了子元素的那片存儲區,而並非只是存了值而已。每個父元素都將['son']
指向對應子元素的儲存區,這樣,其實在記憶體裡已經連接形成了一個樹形的結構,而由於所有的父元素裡['son']
都是指向了子元素的記憶體區,所以,輸出數組中的父子關係和記憶體裡的資料關係樹基本上是一致的。參考@vishun
雷雷雷雷
雷雷
看到了以上的回答,我還是想回答一下,引用再PHP里和指針在C/C++裡的用法類似,相當於操作這個變數的指針,這樣子的話,在函數裡操作這個引用變數也就觸發本身的變數更改。
引用能帶來一些好處:因為是直接操作“指針”,效率很高,不會產生多餘的內存浪費以及消耗開闢內存的性能;