Saya boleh menggunakannya, tetapi saya tidak dapat memahaminya setiap kali saya menontonnya. Bolehkah sesiapa menerangkan dan menjelaskannya? &Bagaimana untuk memahami tugasan rujukan di sini?
$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;
}
Terutamanya penggunaan rujukan, yang boleh memudahkan ujian:
Apabila dipetik:
Tanpa petikan:
Apabila terdapat rujukan, perubahan kepada sub-elemen akan dipaparkan dalam keseluruhan tatasusunan, tetapi apabila tiada rujukan, perubahan kepada sub-elemen tidak akan memberi kesan kepada keseluruhan tatasusunan.
Ada sesiapa di sini? Tolong jelaskan
Itu sahaja,
Tetapi sesuatu berubah dalamforeach
括号中的items
=>a
和循环体中的items
=>b
在内存中存在两个地方. 使用&
之后,b
将会指向a
即真正的items
=> php7 foreach tidak serasi ke belakang
php7
之后,foreach
Tugasan rujukan bermaksud bahagian kiri tugasan menghala terus ke kawasan dalam memori di mana nilai disimpan, bukannya membuka ruang baharu untuk menerima salinan data.
Jadi, dalam hubungan peringkat ibu bapa-anak, tugasan rujukan terus menghala
['son']
,直接指向了子元素的那片存储区,而并非只是存了值而已。每一个父元素都将['son']
指向对应子元素的存储区,这样,其实在内存里已经连接形成了一个树形的结构,而由于所有的父元素里['son']
dalam elemen induk ke kawasan memori elemen anak Oleh itu, hubungan ibu bapa-anak dalam tatasusunan output pada asasnya sama dengan hubungan data pokok dalam ingatan.Rujukan @vishun
Selepas melihat jawapan di atas, saya masih mahu menjawab Penggunaan rujukan dalam PHP adalah serupa dengan penunjuk dalam C/C++ Ia bersamaan dengan mengendalikan penunjuk pembolehubah ini fungsi juga akan mencetuskan Pembolehubah itu sendiri berubah.
Rujukan boleh membawa beberapa faedah: kerana ia mengendalikan "penunjuk" secara langsung, ia sangat cekap dan tidak akan menyebabkan pembaziran memori yang tidak perlu dan memakan prestasi membuka ingatan