Может ли кто-нибудь объяснить мне этот цикл while для PHP? - PullRequest
1 голос
/ 23 июня 2010

Может ли кто-нибудь объяснить мне этот цикл while?

while (list($key, $value) = each($HTTP_GET_VARS)) {
       $get_url .= $key . '=' . $value . '&';
    }

Я знаю, что глупые, но много раз глупые вещи имеют огромное значение ....

Ответы [ 4 ]

4 голосов
/ 23 июня 2010

$HTTP_GET_VARS является устаревшим массивом, который содержит параметры, переданные в строке запроса.each() - это функция, которая перебирает массив и возвращает массив, состоящий из ключа и значения «текущего» элемента массива.list() - это языковая конструкция, которая разбивает присвоенный ей массив на передаваемые ему переменные.

Когда достигается конец массива, each() возвращает ложное значение, вызывая выход цикла.

2 голосов
/ 23 июня 2010

Функция каждая () возвращает текущий ключ и значение для данного массива, а затем перемещает указатель массива (текущий элемент) вперед на единицу.

Следовательно, его многократный вызов - это способ перебирать элементы в массиве по порядку, и когда вы достигаете конца, each () просто прекращает возвращать значение.

Список () - это не функция, а языковая конструкция; это ярлык для установки нескольких переменных одновременно. В опубликованном примере он устанавливает $ key на первое значение в массиве, возвращаемом each () (текущий ключ), и $ value на второе (текущее значение).

Существует целый ряд проблем с этим фрагментом кода.

  1. Вы должны сбросить указатель массива, прежде чем использовать каждый (), как это, потому что вы не должны предполагать, что указатель массива находится в начале ко времени выполнения этого кода.
  2. Значения, которые он объединяет в строку запроса, должны быть экранированы (например, с помощью urlencode ()).
  3. Это также оставляет ненужный символ «&» в конце строки запроса без необходимости.
  4. $ HTTP_GET_VARS является устаревшей функцией PHP; его следует заменить на $ _GET.
  5. Итерирование по массиву с помощью foreach () чище и проще для чтения, чем while, список, каждый из которых похож на этот, и может быть также быстрее.
1 голос
/ 23 июня 2010

Цикл проходит через каждую пару параметров HTTP GET в массиве $ HTTP_GET_VARS, присваивая сторонам пары две переменные $ key и $ value в этом порядке.

Назначение «возвращает» свое значение, следовательно, в конце массива each () вернет false, что, несмотря на назначение, приведет к прерыванию условия while.

Внутри цикла каждый из $ key и $ value добавляется в строку $ get_url с некоторым форматированием.

1 голос
/ 23 июня 2010

each возвращает массив, содержащий текущий ключ и значение, при выполнении итерации по массиву.list позволяет распаковать массив в несколько переменных.Я считаю, что конструкция foreach гораздо более ясна.

foreach ($some_array as $key => $value)
{
    ...
}

Как отмечает Игнасио, HTTP_GET_VARS устарела.Вместо этого вы можете использовать $_GET.

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