функция сброса и ассоциативные массивы в php? - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь перебрать ассоциативный массив с помощью функций current(), next() и reset(). Первые две функции отлично работают для меня, но когда я захочу повторить их снова и использовать функцию reset(), она не будет работать.

Вот код:

while ($availability_per_date = mysql_fetch_assoc($availability)) {

    //it won't go in to the loop below a second time
    while (current($room_types_available)) {

        $key= key($room_types_available);

        if ($availability_per_date["{$key}"] == 0) {                
            $room_types_available["{$key}"] = 0;
        }
        echo $key;

        next($room_types_available);
    }
    reset($room_types_available);
}

Ответы [ 3 ]

1 голос
/ 04 апреля 2011

Прежде всего, попробуйте использовать встроенные функции, которые могут легко работать с вашим кодом, вот пример:

while ($availability_per_date = mysql_fetch_assoc($availability)) {
    //it won't go in to the loop below a second time
    foreach($room_types_available as $key=>$value){
        if ($availability_per_date["{$key}"] == 0) {                
            $room_types_available["{$key}"] = 0;
        }
        echo $key;
    }
}

Если в вашем приложении появятся какие-либо ошибки, опубликуйте его, и мы исправим:)

1 голос
/ 04 апреля 2011

Возможно ли, что возврат тока ($ room_types_available) во второй раз возвращает значение, которое приводит к значению false?

Использование функции each () - хороший способрешить проблему, это позволяет избежать двусмысленности на ложь.

0 голосов
/ 04 апреля 2011

Не копировать на чужой ответ, но preinheimer верен.

На первой итерации цикла вы устанавливаете для ряда значений значение false (строка «0» является ложной в PHP).).Затем выполняется обнаружение их в последующих вызовах, а затем преждевременное завершение (поскольку current в данном случае возвращает false).Ваши два варианта используют каждый (как предложено preinheimer) или foreach вместо while (как предложено Khez).

Лично, (как я уже говорил в комментариях выше), я рассматриваю foreach как far более интуитивно понятный и, следовательно, лучше практиковать, но ни один из них не является функционально неправильным.

...