使えるのですが、何度見ても理解できないのですが、どなたか説明して理解していただけないでしょうか? &ここでの参照割り当てを理解するにはどうすればよいですか?
主に参照を使用することで、テストを簡素化できます:
引用する場合:
引用なし:
参照がある場合、サブ要素への変更は配列全体に表示されますが、参照がない場合、サブ要素への変更は配列全体に影響を与えません。
ここには誰もいませんか?説明してください
それです、foreach 括号中的 items => a 和循环体中的 items => b 在内存中存在两个地方. 使用 & 之后, b 将会指向 a 即真正的 items。
foreach
items
a
b
&
=> php7 foreach は下位互換性がありません php7 之后, foreach
php7
参照割り当てとは、データのコピーを受け取るために新しい領域を開くのではなく、割り当ての左側が値が保存されているメモリ内の領域を直接指すことを意味します。
そのため、親子レベルの関係では、親要素内の['son'],直接指向了子元素的那片存储区,而并非只是存了值而已。每一个父元素都将['son']指向对应子元素的存储区,这样,其实在内存里已经连接形成了一个树形的结构,而由于所有的父元素里['son']が子要素のメモリ領域を直接指すことになるので、出力配列における親子関係は基本的にデータ関係と同じになります。記憶の中の木。
['son']
参考 @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; }
上記の回答を見た後でも、PHP での参照の使用は、C/C++ でのこの変数のポインターの操作と同じです。この関数は、変数自体の変化もトリガーします。 参照にはいくつかの利点があります。参照は「ポインター」を直接操作するため、非常に効率的であり、不必要なメモリの無駄を引き起こさず、メモリを開くパフォーマンスを消費しません。
主に参照を使用することで、テストを簡素化できます:
リーリー引用する場合:
リーリー引用なし:
参照がある場合、サブ要素への変更は配列全体に表示されますが、参照がない場合、サブ要素への変更は配列全体に影響を与えません。
ここには誰もいませんか?説明してください
それです、
しかし、何かが変更されましたforeach
括号中的items
=>a
和循环体中的items
=>b
在内存中存在两个地方. 使用&
之后,b
将会指向a
即真正的items
。=> php7 foreach は下位互換性がありません
php7
之后,foreach
参照割り当てとは、データのコピーを受け取るために新しい領域を開くのではなく、割り当ての左側が値が保存されているメモリ内の領域を直接指すことを意味します。
そのため、親子レベルの関係では、親要素内の
['son']
,直接指向了子元素的那片存储区,而并非只是存了值而已。每一个父元素都将['son']
指向对应子元素的存储区,这样,其实在内存里已经连接形成了一个树形的结构,而由于所有的父元素里['son']
が子要素のメモリ領域を直接指すことになるので、出力配列における親子関係は基本的にデータ関係と同じになります。記憶の中の木。参考 @vishun
上記の回答を見た後でも、PHP での参照の使用は、C/C++ でのこの変数のポインターの操作と同じです。この関数は、変数自体の変化もトリガーします。
参照にはいくつかの利点があります。参照は「ポインター」を直接操作するため、非常に効率的であり、不必要なメモリの無駄を引き起こさず、メモリを開くパフォーマンスを消費しません。