2016-03-31 3 views
1

Мне интересно, почему этот код работает следующим образом. Зачем менять имя переменной? Нельзя ли $ t быть доступным только в области foreach?Что касается ссылки PHP в области цикла

$types = [ 
    ['name'=>'One'], 
    ['name'=>'Two'] 
]; 

foreach($types as &$t){ 
    if ($t['name']=='Two') $t['selected'] = true; 
} 

// now put that selection to top of the array 
// I know this is not a good way to sort, but that's not the point 
$_tmp=[]; 

// Version 1 
// foreach($types as $v) if (isset($v['selected'])) $_tmp[] = $v; 
// foreach($types as $v) if (!isset($v['selected'])) $_tmp[] = $v; 

// Version 2 
foreach($types as $t) if (isset($t['selected'])) $_tmp[] = $t; 
foreach($types as $t) if (!isset($t['selected'])) $_tmp[] = $t; 

print_r($_tmp); 
//Version 1 : Array ([0] => Array ([name] => Two [selected] => 1) [1] => Array ([name] => One)) 
//Version 2 : Array ([0] => Array ([name] => One) [1] => Array ([name] => One)) 
+2

После объявления переменной в php она будет доступна до конца скрипта. То же самое относится к переменным, объявляемым в цикле For и Foreach. Эти переменные также доступны до конца скрипта. Таким образом, в вашем случае последнее значение, сохраненное в $ t в цикле foreach, будет доступно в остальной части скрипта. –

ответ

1

Правильный ответ - это вопрос. «Как только вы объявите переменную в php, она будет доступна до конца скрипта. То же самое относится к переменным, объявленным в цикле For и Foreach. Эти переменные также доступны до конца скрипта. Таким образом, в последнем случае вы сохраняете значение в $ t в цикле foreach будет доступен в остальной части скрипта. - Gokul Shinde Mar 31 at 9:33 «

0

Вы используете ссылочный оператор (&), из-за этого

$types = array(
0 => array('name'=>'One'), 
1 => array('name'=>'Two')); 

массив превращается в

$types = array(
0 => array('name'=>'One'), 
1=> array('name'=>'Two', 'selected' => 1); 

foreach($types as $t){ 
if ($t['name']=='Two') $t['selected'] = true;} 

Если удалить & из выбранного ключа для-каждого не будет отражать массив $ types.

+0

спасибо, я думаю, что ответ Гокула Шинде - это тот, который я искал. – Kubber

Смежные вопросы