Rumah > Soal Jawab > teks badan
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;
}
習慣沉默2017-06-29 10:10:08
Terutamanya penggunaan rujukan, yang boleh memudahkan ujian:
Apabila dipetik:
$item1= array('id' => 1, 'pid' => 0, 'name' => '安徽省');
$item2= array('id' => 2, 'pid' => 0, 'name' => '浙江省');
$item3=array('id' => 3, 'pid' => 1, 'name' => '合肥市');
$tree[] = &$item1;//注意引用
$item1['son']=&$item2;//注意引用
$item2['son']=$item3;
print_r($tree);
Tanpa petikan:
$item1= array('id' => 1, 'pid' => 0, 'name' => '安徽省');
$item2= array('id' => 2, 'pid' => 0, 'name' => '浙江省');
$item3=array('id' => 3, 'pid' => 1, 'name' => '合肥市');
$tree[] = $item1;//注意无引用
$item1['son']=$item2;//注意无引用
$item2['son']=$item3;
print_r($tree);
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.
迷茫2017-06-29 10:10:08
Itu sahaja, foreach
括号中的 items
=> a
和循环体中的 items
=> b
在内存中存在两个地方. 使用 &
之后, b
将会指向 a
即真正的 items
=> php7 foreach tidak serasi ke belakang php7
之后, foreach
世界只因有你2017-06-29 10:10:08
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.
世界只因有你2017-06-29 10:10:08
Rujukan @vishun
$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' => '安庆市'),
);
//&引用赋值在这儿如何理解?
$items[1]['son'][] = &$items[3];
$items[3]['son'][] = &$items[2];
print_r($items[1]);
//简化了结果,可以直接看son
//Array
//(
// [id] => 1,[pid] => 0,[name] => 安徽省,
// [son] => Array(
// [0] => Array(
// [id] => 3,[pid] => 1,[name] => 合肥市,
// [son] => Array(
// [0] => Array(
// [id] => 2,[pid] => 0,[name] => 浙江省
// )
// )
// )
// )
//)
//无限分级函数么?
function getTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){//关键是看这个判断,是顶级分组就给$tree,不是的话继续拼凑子分组(结合上述&用法)
$items[$item['pid']]['son'][] = &$items[$item['id']];
}else{
$tree[] = &$items[$item['id']];
}
}
return $tree;
}
大家讲道理2017-06-29 10:10:08
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