php - Bolehkah sesiapa menerangkan dengan jelas fungsi hierarki tak terhingga ini?
学习ing
学习ing 2017-06-29 10:08:08
0
6
706

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;
}
学习ing
学习ing

membalas semua(6)
習慣沉默

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.

巴扎黑

Ada sesiapa di sini? Tolong jelaskan

迷茫

Itu sahaja, foreach 括号中的 items => a 和循环体中的 items => b 在内存中存在两个地方. 使用 & 之后, b 将会指向 a 即真正的 items

Tetapi sesuatu berubah dalam

=> 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

$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;
}
大家讲道理

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!