Подтвердить что ты не робот

PHP - Амперсанд перед переменной в цикле foreach

Возможный дубликат:
Ссылка - что означает этот символ в PHP?

Мне нужно знать, почему мы используем амперсанд перед переменной в цикле foreach

foreach ($wishdets as $wishes => &$wishesarray) {
    foreach ($wishesarray as $categories => &$categoriesarray) {

    }
}

Спасибо

4b9b3361

Ответ 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