Почему в символе «&» ($ arr as & $ value)? - PullRequest
0 голосов
/ 16 ноября 2009
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

Означает ли $ key индекс массива?

Ответы [ 5 ]

11 голосов
/ 16 ноября 2009
    $arr = array(1, 2, 3, 4);

    foreach ($arr as $value)
       $value = $value * 100;
    echo implode(' ', $arr); // 1 2 3 4

    foreach ($arr as &$value)
        $value = $value * 100;
    echo implode(' ', $arr); // 100 200 300 400

понял?

11 голосов
/ 16 ноября 2009

&$variable_name - это способ PHP передать по ссылке:

См .: http://php.net/manual/en/language.references.pass.php

Для получения дополнительной информации о том, что ссылки см .: http://www.php.net/manual/en/language.references.whatare.php

3 голосов
/ 16 ноября 2009

У вас есть два разных вопроса. Чтобы ответить первым об амперсанде (&):

Всякий раз, когда вы видите & перед переменной, это означает, что вы будете работать с реальной переменной, а не с ее копией. В вашем примере $value обычно будет копией фактического $value, поэтому любые изменения, внесенные в эту переменную, не повлияют на массив. Но когда вы ставите & перед ним, вы работаете с фактическими данными массива.

Чтобы ответить на ваш второй вопрос, да, $key - это индекс массива, будь то числовой или ассоциативный.

0 голосов
/ 16 ноября 2009

& позволяет изменять значения в $value. Вы можете экспериментировать, попробовав это без. Это называется передачей по ссылке.

Пример здесь не так хорош для объяснения $key, потому что вы показываете обычный массив, а не ассоциативный массив. Вот лучший пример, чтобы проиллюстрировать $key.

$a = array(
  "red" => 1,
  "green" => 2,
  "blue" => 3,
  "white" => 17 /* btw, I patent the white pixel! */
);

foreach ($a as $key => $value) {
  echo "key $key, val $value";
} 
0 голосов
/ 16 ноября 2009

& указывает PHP сделать $ value ссылкой на фактический элемент массива, а не на копию элемента массива. Без & ваш код фактически не изменит значения в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...