Создание и перебор массивов в PHP
Пришло время разобраться с ещё одним типом переменных в PHP - массивами. Массив - это тип переменной, который может содержать множество значений, причём даже разных типов. И этой статье мы поговорим о создании и переборе массивов в PHP.
Создать массив в PHP очень просто:
Здесь мы создали массив, в котором находится пять значений. Обратите внимание, что типы переменных различны. На следующих двух строках мы выводим два элемента из этого массива. Очень важно: нумерация начинается с 0! То есть первый элемент имеет индекс 0, второй - 1 и так далее.
На самом деле, в предыдущем примере мы создавали не массив, а, скорее, список. Список - это тот же массив, но с числовыми индексами, идущими по порядку (то есть 0, 1, 2, 3 и так далее). А теперь создадим именно массив (его ещё называют ассоциативный массив):
Здесь мы создали массив не с числовым индексом, а с так называемыми ключами. Ключами в массиве являются: "Name" и "Age". У каждого ключа имеется значение "Tom" и 14 соответственно. Думаю, здесь вопросов не возникает.
А теперь разберём перебор массива. Первый массив (который список) перебирается элементарно:
Здесь просто идёт цикл for от 0 до длины массива и при каждой итерации выводится элемент массива.
А как же быть с ассоциативными массивами, ведь там индексы не числовые, как их перебирать? Для этого существует цикл foreach, который перебирает массив по ключам:
Думаю, что синтаксис понятен: $k - это ключ, а $v - соответствующее значение, и в этом массиве поочерёдно перебираются все пары в массиве, а потом выводятся. Разумеется, с помощью foreach можно также перебирать и списки.
В этой статье мы с Вами разобрали создание списков и массивов, а также я показал Вам как делать перебор всех значений, используя классическую конструкцию for и очень полезную и простую конструкцию foreach.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 22 ):
Здравствуйте, Михаил, хочу поинтересоваться у Вас по поводу перебора следующего массива списка: for ($i=0;$i<=5;$i++) или for ($i=0; $i<count($arr); $i++). Есть ли существенная разница кроме как что в первом случае необходимо подсчитывать элементы списка, а во втором достаточно вписать только ограничитель массива? Первый вариант более компактный.
Использовать надо второй вариант, так как данный перебор будет универсальным. А задача программиста делать, как можно меньше частного, и как можно больше общего.
хочу вывести к примеру слово привет 10 раз.. скажите, вот так можно делать?? $str = 'привет'; for ($i=1; $i<=10; $i++)
Если это работает, то, да, можно.
Михаил, добрый день! Подскажите, пожалуйста, как можно вытащить максимальный элемент из массива, чтобы показать не только сам элемент, но и его номер? У меня два массива (строки), выполняю деление элементов одного на элементы другого и ввожу результаты в третий массив. Теперь нужно выбрать максимальный и показать его значение и порядковый номер. Попробовал след. алгоритм: for ($i = 0; $i < count($indicator1); $i++) for ($i = 0; $i < count($hum1); $i++) $maxarr[$i]=$indicator1[$i]/$hum1[$i]."<br/>";// делим индикатор на численность $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. Поэтому нужно писать это самому.