PHP - Амперсанд перед переменной в цикле foreach
Возможный дубликат:
Ссылка - что означает этот символ в PHP?
Мне нужно знать, почему мы используем амперсанд перед переменной в цикле foreach
foreach ($wishdets as $wishes => &$wishesarray) {
foreach ($wishesarray as $categories => &$categoriesarray) {
}
}
Спасибо
Ответы
Ответ 1
Этот пример покажет вам разницу
$array = array(1, 2);
foreach ($array as $value) {
$value++;
}
print_r($array); // 1, 2 because we iterated over copy of value
foreach ($array as &$value) {
$value++;
}
print_r($array); // 2, 3 because we iterated over references to actual values of array
Ознакомьтесь с документами PHP для этого здесь: http://pl.php.net/manual/en/control-structures.foreach.php
Ответ 2
Это означает, что он передается по ссылке вместо значения... IE любая манипуляция переменной влияет на оригинал. Это отличается тем, что любые изменения не влияют на исходный объект.
Это много раз задается в stackoverflow.
Ответ 3
Используется для применения изменений в одном экземпляре массива к основному массиву.
Как:
//Теперь изменения не будут влиять на массив $wisharray
foreach ($wishesarray as $id => $categoriy) {
$categoriy++;
}
print_r($wishesarray); //It'll same as before..
Но теперь изменения будут отражать в массиве $wisharray также
foreach ($wishesarray as $id => &$categoriy) {
$categoriy++;
}
print_r($wishesarray); //It'll have values all increased by one..
Ответ 4
Для кода в вашем вопросе не может быть никакого конкретного ответа, потому что внутренний цикл foreach пуст.
То, что я вижу с вашим кодом, состоит в том, что внутренний foreach
выполняет итерацию по ссылке вместо обычного способа.
Я предлагаю вам прочитать foreach
страницу руководства PHP, он охватывает все четыре случая:
foreach($standard as $each);
foreach($standard as &$each); # this is used in your question
$reference = &$standard;
foreach($reference as $each);
$reference = &$standard;
foreach($reference as &$each); # this is used in your question