PHP массивы являются простым способом хранения множества битов информации (например, строк) в простой переменной PHP, известный как "переменная-массив". Доступ к каждой отдельной части информацию можно получить с помощью ключа или индекса.
С другой стороны, "строки" являются конечным набором символов алфавита. В PHP можно указать строку с одинарных или двойных кавычках:
1 2 3 4 |
<?php $string1= 'This is a string created by single quote'; $string2= "This is a string created by double quotes"; ?> |
Большая часть информации, которую вы собираете из веб форм, имеет строковый тип данных. Хранение строк в массиве позволяет использовать в коде только одну PHP переменную для хранения большого количества информации. Предположим, вы хотите определить переменную массива, который состоит из планет Солнечной системы, вы могли бы сделать это следующим образом:
1 2 3 4 5 6 7 8 |
<?php //создать переменную-массив $planets $planets=array(); //сохранить строки, которые являются названиями планет, в переменной-массиве $planets $planets=array("Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune"); //вывести в броузер содержимое переменной-массива var_dump($planets); ?> |
Вывод будет таким:
array(8) {
[0]=>string(7) "Mercury"
[1]=>string(5) "Venus"
[2]=>string(5) "Earth"
[3]=>string(4) "Mars"
[4]=>string(7) "Jupiter"
[5]=>string(6) "Saturn"
[6]=>string(6) "Uranus"
[7]=>string(7) "Neptune"
}
Числа от [0] до [7] являются значениями индекса (ключа), которые соответствуют каждой строке, хранящейся в массиве. Строку можно получить при помощи ключа. Предположим, вам необходимо получить планету "Jupiter", ключом будет 4:
1 2 3 |
<?php var_dump($planets[4]); ?> |
Существуют также и "ассоциативные массивы", которые являются полезными, если не используется последовательный числовой индекс (ключ) для элементов строки. Например:
1 2 3 4 5 6 7 8 |
<?php //Пример1. Ассоциативный массив людей и их животных $favoritepet=array("Mary"=>"Dog","John"=>"Snakes","Paul"=>"Centipede","Peter"=>"Cat"); var_dump($favoritepet); //Пример2. Ассоциативный массив людей и их вес в килограммах $weight=array("Mary"=>50,"John"=>60,"Paul"=>80,"Peter"=>71); var_dump($weight); ?> |
Далее приведен вывод вышеуказанных массивов
Пример1:
array(4) {
["Mary"]=>string(3) "Dog"
["John"]=>string(6) "Snakes"
["Paul"]=>string(9) "Centipede"
["Peter"]=>string(3) "Cat"
}
Пример2:
array(4) {
["Mary"]=>int(50)
["John"]=>int(60)
["Paul"]=>int(80)
["Peter"]=>int(71)
}
<b>Функции для работы с массивами строк</b>
1. count() это функция, которую можно использовать для подсчета всех элементов, которые присутствуют в массиве. Например:
1 2 3 4 |
<?php $nameofgirl= array("Amanda","Jenna","Elizabeth"); echo "The number of girl names in the array is ".count($nameofgirl); ?> |
Результатом будет 3. Существует функция аналогичная count(), известная как SizeOf(), которая дает тот же результат.
2. Функция array_push() используется при вставке/добавлении новых элементов в существующий массив. Предположим, вы добавите следующие имена Linda,Jenny и Anna в созданную ранее переменную-массив $nameofgirl:
1 2 3 4 5 6 7 |
<?php $nameofgirl=array(); $nameofgirl= array("Amanda","Jenna","Elizabeth"); //добавить новые имена в существующий массив array_push($nameofgirl, "Linda", "Jenny","Anna"); var_dump($nameofgirl); ?> |
А вот вывод (обратите внимание, что новые элементы добавляются в конец массива)
array(6) {
[0]=> string(6) "Amanda"
[1]=> string(5) "Jenna"
[2]=> string(9) "Elizabeth"
[3]=> string(5) "Linda"
[4]=> string(5) "Jenny"
[5]=> string(4) "Anna"
}
Ещё один способ добавить элементы в массив, это приравнять добавляемую строку переменной-массиву:
$arrayvariable[]="String to be inserted to the array"
Добавим пять букв в созданный массив букв алфавита:
1 2 3 4 5 6 7 8 9 10 |
<?php $fiveletters=array("d","e","f","e","f"); $existingarray=array("a","b","c"); //Считываем массив из пяти букв с помощью цикла и добавляем в существующий массив foreach ($fiveletters as $value) { $existingarray[]=$value; } //выводим обновленные элементы в массиве $existingarray var_dump($existingarray); ?> |
Вот результат:
array(8) {
[0]=>string(1) "a"
[1]=>string(1) "b"
[2]=>string(1) "c"
[3]=>string(1) "d"
[4]=>string(1) "e"
[5]=>string(1) "f"
[6]=>string(1) "e"
[7]=>string(1) "f"
}
3. Функция in_array() проверяет, присутствует ли определенная строка в массиве.
Предположим, необходимо проверить присутствует ли имя "Linda" в массиве $nameofgirl:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $nameofgirl=array(); $nameofgirl= array("Amanda","Jenna","Elizabeth"); array_push($nameofgirl, "Linda", "Jenny","Anna"); //проверяем присутствует ли имя "Linda" в массиве if (in_array("Linda",$nameofgirl)) { echo "Yes the name Linda is found on the array"; } else { echo "Sorry but the name Linda is not on the array"; } ?> |
Приведенный выше код выводит "Yes the name Linda is found in the array".
4. Функция array_unique() удаляет из массива повторяющиеся значения.
Допустим, у нас есть массив цветов:
1 2 3 4 5 |
<?php //Массив цветов, элемент "red" повторяется $fivecolors=array("blue","red","yellow","red","magenta"); var_dump($fivecolors); ?> |
Ниже приведен дамп этого массива (обратите внимание на значение индекса (ключа) каждого элемента строки):
array(5) {
[0]=>string(4) "blue"
[1]=>string(3) "red"
[2]=>string(6) "yellow"
[3]=>string(3) "red"
[4]=>string(7) "magenta"
}
Теперь удалим дубликаты с помощью функции array_unique:
1 2 3 4 5 6 7 |
<?php $fivecolors=array("blue","red","yellow","red","magenta"); //удаляем повторяющиеся значения в массиве $unique=array_unique($fivecolors); //выводим в броузер var_dump($unique); ?> |
Далее приведен дамп результатов работы функции array_unique. Обратите внимание, что элемент с индексом 3 исчез, поскольку является дубликатом.
array(4) {
[0]=>string(4) "blue"
[1]=>string(3) "red"
[2]=>string(6) "yellow"
[4]=>string(7) "magenta"
}
5. Функция array_values() используется для устранения любых разрывов в индексах, вызванных выполнением array_unique. В предыдущем примере, вы можете заметить значения индексов 0,1,2 и 4 (3 удален, потому что является дубликатом). Порядок индексов можно восстановить в 0,1,2,3,4 с помощью функции array_values():
1 2 3 4 5 6 7 8 |
<?php $fivecolors=array("blue","red","yellow","red","magenta"); $unique=array_unique($fivecolors); //восстанавливает нумерацию индексов, удаляя разрывы в последовательности $resettedindex= array_values($unique); //вывод в браузер var_dump($resettedindex); ?> |
Будет выведено:
array(4) {
[0]=> string(4) "blue"
[1]=> string(3) "red"
[2]=> string(6) "yellow"
[3]=> string(7) "magenta"
}
Теперь индексы имеют правильную последовательность (0,1,2,3)
6. Функция array_change_key_case() может быть использована для приведения всех элементов в массиве к единому регистру. Иногда вы будете обрабатывать в массиве строковые элементы, которые не имеют единого регистра (например, строки с верхнем и нижнем регистре). Если вам нужно сделать все строки "в верхнем регистре" или "в нижнем регистр", то можете использовать эту функцию.
1 2 3 4 5 6 7 |
<?php $mixedcase=array("bLuE"=>1,"RED"=>2,"Yellow"=>3,"mAgENTA"=>4); //Преобразовать все строки в массиве в верхний регистр $uppercase= array_change_key_case($mixedcase, CASE_UPPER); //вывести содержимое массива var_dump($uppercase); ?> |
Вывод:
array(4) {
["BLUE"]=>int(1)
["RED"]=>int(2)
["YELLOW"]=>int(3)
["MAGENTA"]=>int(4)
}
Примечание: Если не указать CASE_UPPER, то по умолчанию будет использоваться нижний регистр.
7. Функция array_count_values возвращает частоту появления элементов в массиве. Пример:
1 2 3 4 5 6 |
<?php $fivecolors=array("blue","red","yellow","red","magenta"); //возвращает частоту появления элементов $frequency=array_count_values($fivecolors); var_dump($frequency); ?> |
При этом будет выведен следующий результат:
array(4) {
["blue"]=>int(1)
["red"]=>int(2)
["yellow"]=>int(1)
["magenta"]=>int(1)
}
Вы уже заметили, что результатом функции var_dump является ассоциативный массив. Можно получить частоту появления красного цвета следующим образом:
1 2 3 4 5 6 |
<?php $fivecolors=array("blue","red","yellow","red","magenta"); $frequency=array_count_values($fivecolors); //возвращает частоту появления только красного цвета echo $frequency["red"]; ?> |
8. Функция array_search будет искать данную строку в переменной-массиве и возвращать индекс, если он найден. Пример:
1 2 3 4 5 6 |
<?php $fivecolors=array("blue","red","yellow","magenta"); //Ищет синий цвет и возвращает ключ $key = array_search('blue', $fivecolors); echo $key; ?> |
Результатом будет 0, поскольку синий (blue) является первым элементом массива. Ещё пример:
1 2 3 4 5 6 |
<?php $fivecolors=array("blue","red","yellow","magenta"); //Ищет белый цвет и возвращает ключ $key = array_search('white', $fivecolors); echo $key; ?> |
Результатом будет False/Null или логический 0, потому что белый цвет не входит в массив. Имейте в виду, что 0 может быть результатом двух возможных сценариев: в первом случае цвет действительно существует в массиве, и находится в первом элементе. Во втором сценарий функция array_search не может найти строку в массиве и возвращает то, что может быть интерпретировано как 0/False или null.
Чтобы избежать подобных проблем, сперва потребуется проверить с помощью функции in_array(), что строка действительно существует в массиве.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $fivecolors=array("blue","red","yellow","red","magenta"); //Найти белый цвет и вернуть ключ //Проверить, что белый цвет присутствует в массиве if (in_array("white",$fivecolors)) { //белый цвет есть в массиве, теперь получить ключ $key = array_search('white', $fivecolors); echo $key; } else { //белого цвета нет в массиве echo "The key does not exist for this color"; } ?> |
9. Функция asort сортирует строковые элементы переменной- массива в алфавитном порядке и поддерживает соответствующий индекс.
1 2 3 4 5 6 |
<?php $favoritebands=array("Mary"=>"Nirvana","John" =>"Metallica","Paul"=>"Beatles","Peter"=>"Who","Alice"=>"Greenday","Chris"=>"Black Sabbath"); foreach ($favoritebands as $key => $val) { echo "$key = $val<br />"; } ?> |
Результат (без сортировки)
Mary = Nirvana
John = Metallica
Paul = Beatles
Peter = Who
Alice = Greenday
Chris = Black Sabbath
Сортировка элементов массива по именам групп:
1 2 3 4 5 6 7 8 |
<?php $favoritebands=array("Mary"=>"Nirvana","John" =>"Metallica","Paul"=>"Beatles","Peter"=>"Who","Alice"=>"Greenday","Chris"=>"Black Sabbath"); //сортирует строковые элементы и поддерживает ассоциацию с индексом asort($favoritebands); foreach ($favoritebands as $key => $val) { echo "$key = $val<br />"; } ?> |
Теперь отсортированный результат:
Paul = Beatles
Chris = Black Sabbath
Alice = Greenday
John = Metallica
Mary = Nirvana
Peter = Who
10. array_merge объединяет элементы двух и более массивов
1 2 3 4 5 6 7 |
<?php $fivecolors=array("blue","red","yellow","magenta"); $threecolors=array("white","black","green"); //Объединить два массива $eightcolors=array_merge($fivecolors,$threecolors); var_dump($eightcolors); ?> |
Результат:
array(7) {
[0]=>string(4) "blue"
[1]=>string(3) "red"
[2]=>string(6) "yellow"
[3]=>string(7) "magenta"
[4]=>string(5) "white"
[5]=>string(5) "black"
[6]=>string(5) "green"
}
11. Функция array_pop извлекает последний элемент из массива. Это полезно, когда необходимо удалить последний элемент из массива:
1 2 3 4 5 6 7 8 9 |
<?php $animals=array("bear","lion","cheetah","tiger","wolf"); //удаляем последний элемент $pop_out = array_pop($animals); //показать удаленный элемент var_dump($pop_out); //вывести обновленный массив animals var_dump($animals); ?> |
Вывод для последнего удаленного элемента:
string(4) "wolf"
Вывод обновленного массива animals (элемента wolf нет, он был удален из массива)
array(4) {
[0]=>string(4) "bear"
[1]=>string(4) "lion"
[2]=>string(7) "cheetah"
[3]=>string(5) "tiger"
}