2010-03-17 3 views
3

Вот код:изменить массив в цикле

$arraya = array('a','b','c'); 
foreach($arraya as $key=>$value) 
{ 
    if($value == 'b') 
    { 
     $arraya[] = 'd'; 
     //print_r($arraya); //$arraya now becomes array('a','b','c','d') 
    } 
    echo $key.' is '.$value."\n"; 
} 

и получите:

0 is a 
1 is b 
2 is c 

И я удивляюсь, почему 3 is d не показывает ??

+0

Возможный дубликат [изменить начальный массив внутри цикла foreach?] (Http://stackoverflow.com/questions/2348077/change-initial-array-inside-the-foreach-loop) –

ответ

9

Из PHP manual:

Примечание: Если не ссылается массив, Еогеасп работает на копии указанного массива, а не сам массив. foreach имеет некоторые побочные эффекты для указателя массива. Не полагайтесь на указатель массива во время или после foreach, не перезагружая его.

+1

+1, был близок к приходите к такому выводу! –

+2

+1 Другими словами: не пытайтесь изменить массив, находясь в цикле 'foreach'. –

+0

'foreach (& $ arraya as $ key => $ value)' недопустимый синтаксис в PHP 5.3. – janmoesen

1
 

$arraya = array(a,b,c); 
foreach($arraya as $key=>$value) 
{ 
    if($value == b) 
    { 
     $d = 'd'; 
     array_push($arraya, $d); 
     //print_r($arraya); //$arraya now becomes array(a,b,c,d) 
    } 
    print_r($arraya); 
    echo $key.' is '.$value."\n"; 
} 
 

вам нужно будет напечатать весь массив не отдельные элементы один за другим. , вы получите свой результат, только когда вы напечатаете $ arraya
, если $ arraya уже имеет «d», тогда он легко распечатался.

0

это по той же причине, что еще в следующем заявлении не будет выполнено ...

int a = 1; 
if(a == 1){ 
    a = 0; 
} 
else{ 
    //print something; 
} 

вашего Foreach имеет дело с массивом, как это, когда она оценивается по п Еогеасп.

Смежные вопросы