Maison > Questions et réponses > le corps du texte
Je peux l'utiliser, mais je n'arrive pas à le comprendre à chaque fois que je le regarde. Quelqu'un peut-il l'expliquer et le clarifier ? &Comment comprendre l'affectation de référence ici ?
$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
Principalement l'utilisation de références, qui peuvent simplifier le test :
Lorsque cité :
$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);
Sans citation :
$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);
Lorsqu'il y a une référence, les modifications apportées aux sous-éléments seront affichées dans l'ensemble du tableau, mais lorsqu'il n'y a pas de référence, les modifications apportées aux sous-éléments n'auront aucun impact sur l'ensemble du tableau.
迷茫2017-06-29 10:10:08
C'est ça, foreach
括号中的 items
=> a
和循环体中的 items
=> b
在内存中存在两个地方. 使用 &
之后, b
将会指向 a
即真正的 items
.
=> php7 foreach n'est pas rétrocompatible php7
之后, foreach
世界只因有你2017-06-29 10:10:08
L'affectation de référence signifie que le côté gauche de l'affectation pointe directement vers la zone de la mémoire où la valeur est stockée, au lieu d'ouvrir un nouvel espace pour recevoir une copie des données.
Ainsi, dans la relation au niveau parent-enfant, l'affectation de référence pointe directement ['son']
,直接指向了子元素的那片存储区,而并非只是存了值而已。每一个父元素都将['son']
指向对应子元素的存储区,这样,其实在内存里已经连接形成了一个树形的结构,而由于所有的父元素里['son']
dans l'élément parent vers la zone mémoire de l'élément enfant Par conséquent, la relation parent-enfant dans le tableau de sortie est fondamentalement la même que la relation de données. arbre dans la mémoire.
世界只因有你2017-06-29 10:10:08
Référence @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
Après avoir vu les réponses ci-dessus, j'ai quand même envie de répondre. L'utilisation des références en PHP est similaire à celle des pointeurs en C/C++. Dans ce cas, utiliser la variable de référence en. la fonction déclenchera également La variable elle-même change.
Les références peuvent apporter certains avantages : parce qu'elles font fonctionner directement des "pointeurs", elles sont très efficaces et ne provoqueront pas de gaspillage inutile de mémoire et ne consommeront pas les performances d'ouverture de mémoire ;