Значения массива изменяются без изменения, используя цикл foreach - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть пример кода. Это странно! Даже не внося никаких изменений в определенный массив, но все равно значение моего определенного массива изменилось.

$myarr = array(1, 2, 3, 4);
foreach ($myarr as &$myvalue) {
    $myvalue = $myvalue * 2;
}
print_r($myarr); // Output - Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

Не могли бы вы объяснить, как это произошло?

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

вы передаете адрес myarr, где myvalue использует тот же адрес myarr, что и его изменение

используйте это

  $myarr = array(1, 2, 3, 4);
    foreach ($myarr as $myvalue) {
        $myvalue = $myvalue * 2;
    }
    print_r($myarr);
0 голосов
/ 09 сентября 2018

вы пробовали без "&" перед $ myvalue?

Пожалуйста, прочитайте здесь PHP: Что означает & перед именем переменной?

0 голосов
/ 09 сентября 2018

Вы изменили исходный массив, потому что вы используете & в цикле массива.

Этот сигнал для ссылается на как комментарии @axiac.

Чтобы избежать изменений в исходном массиве, используйте следующий цикл for:

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