Цикл for — PHP: Массивы
Работа с массивами практически всегда подразумевает итерацию по его элементам. Самый простой способ выполнить её — циклы.
Обход
$userNames = ['petya', 'vasya', 'evgeny']; for ($i = 0; $i count($userNames); $i++) print_r("$userNames[$i]>\n"); > // => petya // => vasya // => evgeny
В данном коде создаётся массив из трёх элементов — имён. Далее в цикле происходит обход массива и вывод на экран всех имён так, что каждое имя оказывается на новой строке.
Рассмотрим этот этап подробнее. При обходе массива циклом for , как правило, счётчик играет роль индекса в массиве. Он инициализируется нулём и увеличивается до count($userNames) — 1 , что соответствует индексу последнего элемента.
Интересно производится печать на экран. Элемент массива может участвовать в строковой интерполяции, а значит, мы можем сразу печатать и имя и перевод строки, используя такую конструкцию «\n» .
А что, если нам нужно вывести значения в обратном порядке? Для этого есть два способа. Один — идти в прямом порядке, то есть от нулевого индекса до последнего, и каждый раз вычислять нужный индекс по такой формуле размер массива — 1 — текущее значение счётчика .
Но есть и другой способ. Можно просто идти от верхней границы к нижней. В такой ситуации код меняется на следующий:
$userNames = ['petya', 'vasya', 'evgeny']; for ($i = count($userNames) - 1; $i >= 0; $i--) print_r("$userNames[$i]>\n"); >
При таком обходе проверка остановки должна быть именно на >= , иначе пропустится элемент с индексом 0 .
Изменение
Сам цикл при изменении остаётся тем же самым, меняется только его тело. Предположим, что перед нами стоит задача нормализации списка электронных адресов. Допустим, в нормализацию адресов входит приведение их к нижнему регистру. Тогда код будет выглядеть так:
$emails = ['VASYA@gmAil.com', 'iGoR@yandex.RU', 'netiD@hot.CoM']; print_r($emails); // => Array // => ( // => [0] => VASYA@gmAil.com // => [1] => iGoR@yandex.RU // => [2] => netiD@hot.CoM // => ) for ($i = 0; $i count($emails); $i++) # strtolower - стандартная функция php $emails[$i] = strtolower($emails[$i]); > print_r($emails); // => Array // => ( // => [0] => vasya@gmail.com // => [1] => igor@yandex.ru // => [2] => netid@hot.com // => )
Ключевая строчка: $emails[$i] = strtolower($emails[$i]); . В ней происходит перезапись элемента под индексом $i . Иногда полезно создать промежуточную переменную для упрощения анализа кода:
$email = $emails[$i]; $emails[$i] = strtolower($email);
Инициализация цикла
При инициализации цикла for в круглых скобках располагаются три блока выражений, разделяемые символом ; .
Содержимое первого блока инициализации выполняется перед началом цикла и только один раз.
Второй блок определяет условие выполнения цикла и содержит выражение, которое вычисляется перед каждой очередной итерацией. Работа цикла продолжается, если это выражение возвращает true . Если же проверка оказывается ложной, цикл заканчивает свою работу.
В третьем блоке содержатся выражения, которые обрабатываются в конце итерации цикла. Обычно здесь происходит необходимое преобразование счётчика, например, инкремент.
$colors = ['red', 'black', 'white', 'green']; for ($i = 0; $i count($colors); $i++) print_r("$colors[$i]>\n"); >
В процессе работы цикла выражение, которое содержится в блоке условий вычисляется заново. Это значит, что в нашем примере длина массива count($colors) будет вычисляться вновь и вновь при каждом проходе цикла. Так как сам массив остаётся неизменным, то повторное вычисление размера оказывается избыточным. Повторения операции можно избежать, если определить переменную за пределами цикла и присвоить ей необходимое значение.
$colors = ['red', 'black', 'white', 'green']; $length = count($colors); for ($i = 0; $i $length; $i++) print_r("$colors[$i]>\n"); >
Но существует более оптимальное решение: описать несколько выражений в блоке инициализации цикла for и разделить их запятыми. Это позволяет избегать лишних вычислений, в случае с нашим примером, единожды определив значение length . А также мы сразу видим переменные, которые используются только внутри цикла.
$colors = ['red', 'black', 'white', 'green']; for ($i = 0, $length = count($colors); $i $length; print($i), $i++) print_r("$colors[$i]>\n"); > // => red // => 0black // => 1white // => 2green // => 3
А вот пример использования нескольких выражений в блоке изменения счётчика:
for ($i = 0; $i 5; print("$i\n"), $i++) // some code > // => 0 // => 1 // => 2 // => 3 // => 4
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Php создать массив через цикл
Для заполнения массива будем использовать цикл
Перед запуском цикла, нам нужно создать пустой массив:
Нам понадобится какой-то массив, чтобы его пропустить в цикле и пересобрать новый массив! Но, чтобы н мучаться мы зададим в цикле приделы работы цикла и как будто пересобираем массив.
А внутри цикла будем заполнять наш новый массив:
И в конце выведем результат вновь собранного массива через print_r
Пример заполнения массива в цикле
Если мы выполним скрипт, который собирает массив в цикле, код скрипта выше мы разобрали, то получим вот такой результат:
Результат заполнения массива в цикле
[0] => 1970[1] => 1971
[2] => 1972
[3] => 1973
[4] => 1974
[5] => 1975
[6] => 1976
[7] => 1977
[8] => 1978
[9] => 1979
[10] => 1980
Такой вариант получения цикла в массив в php применяется очень часто! По многим причинам, причины могут быть разными.
Примеры заполнения массива в цикле.
Если мы посмотрим на нашу страницу blog.html списком, то это простой массив, записанный построчно в файле, выведенный в цикле.
В момент вывода, создается новый массив, где определенным образом(долго рассказывать) собирается новый массив, но уже с количеством просмотров. И если вы нажмете кнопку сортировать по возрастанию, то будет обрабатываться уже пересобранный массив с количеством просмотров.
Создание и перебор массивов в PHP
Пришло время разобраться с ещё одним типом переменных в PHP — массивами. Массив — это тип переменной, который может содержать множество значений, причём даже разных типов. И этой статье мы поговорим о создании и переборе массивов в PHP.
Создать массив в PHP очень просто:
Здесь мы создали массив, в котором находится пять значений. Обратите внимание, что типы переменных различны. На следующих двух строках мы выводим два элемента из этого массива. Очень важно: нумерация начинается с 0! То есть первый элемент имеет индекс 0, второй — 1 и так далее.
На самом деле, в предыдущем примере мы создавали не массив, а, скорее, список. Список — это тот же массив, но с числовыми индексами, идущими по порядку (то есть 0, 1, 2, 3 и так далее). А теперь создадим именно массив (его ещё называют ассоциативный массив):
Здесь мы создали массив не с числовым индексом, а с так называемыми ключами. Ключами в массиве являются: «Name» и «Age«. У каждого ключа имеется значение «Tom» и 14 соответственно. Думаю, здесь вопросов не возникает.
А теперь разберём перебор массива. Первый массив (который список) перебирается элементарно:
Здесь просто идёт цикл for от 0 до длины массива и при каждой итерации выводится элемент массива.
А как же быть с ассоциативными массивами, ведь там индексы не числовые, как их перебирать? Для этого существует цикл foreach, который перебирает массив по ключам:
Думаю, что синтаксис понятен: $k — это ключ, а $v — соответствующее значение, и в этом массиве поочерёдно перебираются все пары в массиве, а потом выводятся. Разумеется, с помощью foreach можно также перебирать и списки.
В этой статье мы с Вами разобрали создание списков и массивов, а также я показал Вам как делать перебор всех значений, используя классическую конструкцию for и очень полезную и простую конструкцию foreach.
Создано 06.11.2010 10:20:02
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 22 ):
Использовать надо второй вариант, так как данный перебор будет универсальным. А задача программиста делать, как можно меньше частного, и как можно больше общего.
хочу вывести к примеру слово привет 10 раз.. скажите, вот так можно делать?? $str = ‘привет’; for ($i=1; $i’; >
Если это работает, то, да, можно.
Михаил, добрый день! Подскажите, пожалуйста, как можно вытащить максимальный элемент из массива, чтобы показать не только сам элемент, но и его номер? У меня два массива (строки), выполняю деление элементов одного на элементы другого и ввожу результаты в третий массив. Теперь нужно выбрать максимальный и показать его значение и порядковый номер. Попробовал след. алгоритм: for ($i = 0; $i < count($indicator1); $i++) for ($i = 0; $i < count($hum1); $i++) $maxarr[$i]=$indicator1[$i]/$hum1[$i]."
«;// делим индикатор на численность $max=0; $sz=sizeof($maxarr); for($i=0;$i <$sz;$i++) if($maxarr[$i] >$max) $max=$maxarr[$i]; $maxI=$i; echo $max; echo $maxI; Выводится только показатель, а его порядковый номер нет. Спасибо! Михаил, и еще один вопрос. Подскажите, как вывести элементы массива, чтобы их порядковые номера начинались с 1. Т.е. arr[0] выводился бы на экран как первый элемент. Спасибо!
if($maxarr[$i] > $max) $max=$maxarr[$i]; $maxI=$i; — фигурных скобок не хватает, 2 же оператора. На второй вопрос ответ — по-хорошему никак, и это правильно, поскольку гораздо удобнее нумерация с 0. Если же нужно с 1, то и инициализируйте постоянно массивы с 1 (вручную), и все циклы также с 1 начинайте, а не с 0.
Михаил, спасибо! Вроде все получилось! Внимательность, и еще раз внимательность! По второму вопросу: что означает инициализировать постоянно вручную? Не совсем понял. Как его объявлять и присваивать данные? Спасибо!
Это значит, что указывать индекс постоянно. $array[] — вот так не получится, поэтому нужно указывать в первый раз $array[1], а уже потом можно и $array[].
Михаил, добрый день! Спасибо за ответ. Скажите, как подсчитать сумму элементов массива? Нашел функцию sum_array, но почему то не работает. Спасибо!
Сумму элементов массива Вы должны сами научиться считать. Это простейшая задача, смысла делать что-то ещё нет, пока Вы её не решите. Поэтому подумайте сами.
Согласен с вами полностью! Задача начального уровня (куда я и отношусь) Я решил ее следующим образом: $sum = $sum + $hum3[i]; вложил в цикл for. Но мне интересна именно отдельная функция. Это же легче. Не надо вводить переменную. Сразу выводишь на печать. Существует ли такая функция? Спасибо!
array_sum() — функция, возвращающая сумму элементов массива.
Михаил, спасибо! Еще немножко помучаю вас :)! Скажите, существуют ли в php готовые функции например расчета коэффициента корреляции или необходимо писать алгоритм? Я пока баклажан в php, но не хотелось бы изобретать велосипед.
Таких функций точно нет, это не Statistica и даже не Matlab. Поэтому нужно писать это самому.