2015-04-02 2 views
-5

Кто-нибудь знает, почему этот простой бит кода не работает? Второй цикл, похоже, не имеет места.Любые идеи, почему этот простой код не работает?

while(list($get_key, $get_value) = each($HTTP_GET_VARS)) { 
    if (!${$get_key}) { 
     ${$get_key}=$get_value; 
    } 
} 

while(list($keyone, $valueone) = each($HTTP_GET_VARS))  
{ 
    echo $keyone; 
} 
+0

'$ HTTP_GET_VARS'? Зачем? – Ghost

+0

Голосование закрывается как не по теме: «Вопросы, требующие помощи по отладке (« почему этот код не работает? ») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны для других читателей. См.: Как создать минимальный, полный и проверенный пример ». –

+0

Второй WHILE, по-видимому, никогда не оценивает значение TRUE. Вместо «=» это должно быть «==» для сравнения, а не для присвоения. – BigScar

ответ

0

Ваша проблема здесь в использовании each(). Он запоминает индекс, который он достиг в массиве, поэтому в вашем втором цикле нет ничего, что можно было бы отключить, чтобы он оценивал значение false. Если вы используете reset(), это должно решить проблему.

while(list($get_key, $get_value) = each($HTTP_GET_VARS)) { 
    if (!${$get_key}) { 
    ${$get_key}=$get_value; 
    } 
} 

reset($HTTP_GET_VARS);//will put the pointer back to the first element 

while(list($keyone, $valueone) = each($HTTP_GET_VARS))  
{ 
    echo $keyone; 
} 

В качестве альтернативы вы можете просто использовать foreach(){} синтаксис, который всегда начинается с первого элемента в массиве.

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