2012-01-07 4 views

ответ

8

Это означает, что он передается по ссылке вместо значения ... IE любая манипуляция переменной влияет на оригинал. Это отличается тем значением, при котором любые модификации не влияют на исходный объект.

Это много раз задается в stackoverflow.

+1

добавить, «по ссылке» означает, что он имеет в виду то же выделенный блок памяти для переменной именуются – Prof83

+1

, как напротив «по значению», что означает, что копия переменной создается PHP в новом блоке памяти. – Kaii

+0

Существует два способа передачи справки в код примера вопросов, [Я изложил оба варианта] (http://stackoverflow.com/a/8769347/367456). – hakre

4

Он используется, чтобы применить изменения в одном экземпляре массива основного массива ..

В:

// Теперь изменения не повлияют на массив $ wishesarray

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.. 
36

В этом примере вам покажут разница

$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

+0

Не синтаксис _by reference_ часто вызывает такие ошибки, как: «Невозможно создать ссылки на/из смещений строк»? –

1

Для кода в вашем вопросе, не может быть никакого конкретного ответа дается, потому что внутренний цикл Еогеасп пуст.

Что я вижу с вашим кодом, так это то, что внутренний foreach выполняет итерацию по ссылке вместо обычного способа.

Я предлагаю вам чтения из foreach PHP Manual page, она охватывает все четыре случая:

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