php - обновить переменную foreach внутри нее - PullRequest
1 голос
/ 08 мая 2020

У меня есть массив:

$colors = array("red", "green");

Я использую этот массив в foreach и хочу обновить этот массив внутри foreach, например, следующим образом:

foreach( $colors as $color ){
    if( $color=='green' ){
        array_push($colors, 'blue');  //now $colors is ["red", "green", "blue"]
    }
    echo $color . "<br>";
}

Результат:

red
green

и blue не отображается в результате!

Как я могу обновить foreach переменную внутри него?


обновление: Я делаю это с for, и это работает.

$colors = array("red", "green");

for( $i=0; $i < count($colors); $i++ ){
    if( $colors[$i]=='green' ){
        array_push($colors, 'blue'); //now $colors is ["red", "green", "blue"]
    }
    echo $colors[$i]."<br>";
}

результат

red
green
blue

Как я могу это сделать это с foreach?

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Если вы передадите ссылку (https://www.php.net/manual/en/language.references.php) (см. &$color), он будет работать, поскольку будет указывать на тот же адрес памяти, таким образом обновляя $colors var:

<?php
$colors = array("red", "green");
foreach( $colors as &$color ){
    if( $color=='green' ){
        array_push($colors, 'blue');
    }
    echo $color . "<br>";
}

Конечно, в этом нет необходимости, если вы печатаете $colors вне l oop с print_r($colors);. Этот проход по ссылке необходим только внутри l oop.

0 голосов
/ 08 мая 2020
foreach($colors as $color){
   if( $color=='green' ){
      $colors[]= 'blue';  //now $colors is ["red", "green", "blue"]
   }
}

Теперь используйте foreach l oop для печати всех значений в переменной $ color

foreach($colors as $color){
   echo $color."\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...