ProfiPHPProfiPHP
Категория: PHP для чайников

Объединение данных с помощью массивов в PHP

Переменные, которые позволяют объединять данные по одному имени называются массивами. Например, переменная $city может иметь информацию о названии города, количестве жителей, площадь и другую полезную информация, которая легко поддается редактированию и обработке.

Создание массивов

Аналогично простой переменной, чтобы создать массив, необходимо присвоить ему значения:
$myArray[1] = 'First';
После данного присваивания, массив $myArray будет содержать единственный єлемент со значением First. Посмотрим на следующий фрагмент кода:
$myArray[1] = 'First';
$myArray[2] = 'Second';
$myArray[3] = 'Third';
Теперь массив $myArray содержит три значения: First, Second и Third.

Как видно из примера, массив являет собой набор пар ключ-значение (key/value). Ключ в массиве принято называть индексом (index), который может содержать в себе числа или строки.

Можно использовать также сокращенную запись добавления записей в массив:
$myArray[ ] = 'First';
$myArray[ ] = 'Second';
$myArray[ ] = 'Third;
При данном подходе создается массив с автоматической нумерацией индексов, которые являют собой числа, начиная с 0.

Можно еще более компактно выполнить вышеописанный код, использовав языковую конструкцию array:
$myArray = array( 'First', 'Second', 'Third' );
При необходимости можно изменить индекс первого значения массива:
$myArray = array( 5 => 'First', 'Second', 'Third' );
Аналогичным образом создаются массивы с текстовыми индексами. Например, для файла языка можно создать массив:
$color['green'] = 'Зеленый';
$color['red'] = 'Красный';
Также можно создать массив в определенном диапазоне, например:
$age = range( 10, 20 );
В результате будет создан массив:
[0] => 10
[1] => 11
...
[9] => 19
[10] => 20
Вывод элементов массивов

Просмотреть структуру и значения массива можно воспользовавшись функцией var_dump. Например, опишем с помощью данной функции массив $color:
var_dump( $color );
Результат выражения будет следующий:
array(2) {
["green"]=> string(14) "Зеленый"
["red"]=> string(14) "Красный"
}
Таким образом, мы увидим индексы, значение и тип данных каждого элемента массива. Строковый тип элемента массива определяется ключевым словом string.

Изменение массивов

Средствами PHP можно изменять значения, добавлять или удалять элементы и производить сортировку массивов. Например, изменять значения массива можно простым присваиванием:
$myArray['city'] = 'Moscow';
$myArray['city'] = 'Kiev';
Также можно легко копировать существующий массив в новый, например:
$newArray = $oldArray; 
Удаление значений из массива

Для удаления значения массивов необходимо воспользоваться функцией unset:
unset( $color['red'] );
При удалении элемента с необходимым индексом, все остальные остаются без изменений. Удаление элементов массива по отдельности не влечет за собой удаление самого массива. Для того чтобы удалить массив, необходимо использовать выражение:
unset( $color );
Сортировка массивов

По умолчанию интерпретатор РНР размещает значения элементов массива в возрастающем порядке. При необходимости можно изменить порядок, например, в алфавитном, по индексу или по значению.

Для изменения порядка следования элементов массива следует воспользоваться функцией sort, которая после завершения работы перестанавливает элементы массива в порядке возрастания.
sort( $color );
функция asort сортирует массив таким образом, что сохраняются отношения между ключами и значениями. Ее используют при необходимости сохранения отношения ключ=>значение.

Язык РНР предоставляет много полезных функций для сортировки массивов различными способами.

Использование массивов в выражениях

Значения отдельных элементов массива можно получать путем прямого доступа:
echo $myArray['city'];
Если вы пытаетесь получить доступ к несуществующему массиву, отобразится сообщение об ошибке:
Notice: Undefined index: city in file.php on line 11 
Использование массивов в функции list

В PHP существует функция list, которая позволяет копировать значения массивов в переменные. Например, создадим массив:
$myArray = array( 'First', 'Second', 'Third' );
Продемонстрируем работу функции list:
list( $first, $second ) = $myArray; 
echo $first; // First
echo $second; // Second
В результате создадутся две переменные, $first и $second, которым будут присвоены значения первых двух элементов массива $myArray.

Перемещение по массивам

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

При ручном переборе массив представляется как список, который содержит указатель на его элементы. Указатель не изменяет свое положение до момента его перемещения. Для работы с указателем существуют следующие функции, аргументом которых и есть массив данных:

Current - Возвращает текущий элемент массива.

Next - Передвигает внутренний указатель массива на одну позицию вперёд.

Prev - Передвигает внутренний указатель массива на одну позицию назад.

End - Устанавливает внутренний указатель массива на его последний єлемент.

Reset - Устанавливает внутренний указатель массива на его первый элемент.

Для прохождения поэлементно всего массива существует оператор foreach, который позволяет выполнить набор инструкций со значениями и индексами. Общий синтаксис имеет вид:
foreach ( $array as $key => $value ) 
{
набор операторов;
}
В параметре $array указывается имя массива. Параметр $key являет собой переменную, которой будут присваиваться значения индексов элементов массива. Данный параметр можно не использовать, если будет достаточно только значения элемента. Переменной $value будут присваиваться значения элементов массива.

Рассмотрим следующий пример:
$myArray = array( 'First', 'Second', 'Third' );
foreach ( $myArray as $key => $value )
{
echo $key.'-'.$value.'<br />';
}
Результат примера:
0-First
1-Second
2-Third
Определение размера массива

Чтобы узнать размер массива в языке РНР предусмотрены две функции: count и sizeof. Их общий синтаксис имеет следующий вид:
count( $array ); 
sizeof( $array );
Преобразование массивов в текстовые строки

Иногда необходимо переписать содержимое текстовой строки в массив. Для этого существует функция explode:
explode( "символ", строка );
Аргумент символ является разделителем строки для преобразования строки в массив.

Рассмотрим пример:
$string = "Язык программирования PHP"; 
$newarray = explode ( ' ', $string ) ;
print_r( $newarray );
Результатом будет массив:
Array( [0] => Язык [1] => программирования [2] => PHP )
Аналогичным образом, только наоборот, можно массив преобразовывать в строку. Для выполнения этой операции предназначена функция implode:
implode( "символ", $array ); 
Результат выполнения функции implode будет строка, состоящая из элементов массива $array, разделенных параметром символ.

Преобразование переменных в массивы

Для сохранения элементов массива в переменные или наоборот в РНР предусмотрены функции extract и compact.

С помощью функции extract можно получить значения элементов массива и присваивать их переменным, именами которых являются соответствующие индексы.

Рассмотрим пример:
$var_array = array( 'color' => 'Red', 'city' => 'Moscow');
extract( $var_array );
echo "$color, $city"; // Red, Moscow
Функция compact выполняет обратное действие - преобразование набора переменных в массив. При этом значения переменных копируются в массив.

Разбиение и слияние массивов

PHP позволяет объединять или разделять массивы. Для разбиения массива выполняется операция создания нового, содержащего подмножество элементов исходного. Общий синтаксис функции имеет следующий вид:
array array_slice( array $array, $offset, $length )
Функция array_slice выбирает срез массива и возвращает последовательность элементов массива array, определённую параметрами offset (начальный индекс нового массива) и length (длина нового массива).
Рассмотрим пример:
$color = array( 'red', 'green', 'black' );
$output = array_slice( $color, 1, 1 );
print_r( $output ); // Array ( [0] => green )

Существует также функция array_merge, которая объединяет различные массивы, используя следующее выражение:
array array_merge( array $array1 , $array2 ... ) 
Пример использования:
$array1 = array( 'color' => 'green' );
$array2 = array( 'red', 'blue' );
$result = array_merge( $array1, $array2 );
print_r($result); // Array ( [color] => green [0] => red [1] => blue )
Суммирование массивов

Сложить все значения массива можно функцией array_sum, которая вычисляет сумму значений массива:
number array_sum( array $array )
Можно также удалять повторяющиеся элементы в массиве. Для этого служит функция array_unique:
array array_unique( array $array )
Для перестановки значений и ключей следует воспользоваться функцией array_flip, которая меняет местами ключи с их значениями в массиве:
array array_flip( array $array )
Многомерные массивы

В некоторых случаях необходимо сохранять данные с несколькими ключами. Например, имеется информация о ценах на некоторые продукты:
$clothes['scarf'] = 10;
$clothes['shorts'] = 15;
$clothes['shirt'] = 20;
В любой момент можно просмотреть информацию о ценах на продукты путем прямого доступа к элементам массива $clothes. Но данный вариант совсем не подходит, если список товаров содержит 1000 наименований.

Весь список товаров можно объединить в одну группу. Это можно осуществить, используя многомерные массивы:
$price['clothes']['scarf'] = 10;
$price['clothes']['shorts'] = 15;
$price['clothes']['shirt'] = 20;
Массив $price является двумерным, поскольку представляет собой массив массивов.

Создание многомерных массивов выполняется точно так же, как и одномерных. Аналогично для получение значений элементов многомерного массива используются та же процедура. Проход по многомерному массиву можно осуществить с помощью функции foreach. Но поскольку массив двумерный, для прохода необходимо дважды использовать оператор foreach - один внутри другого.

Массивы, встроенные в PHP

Язык РНР имеет несколько встроенных массивов, в которых содержится различная полезная информация. Например, информация о сервере и среде исполнения сохраняются в массиве $_SERVER.
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
Результат выдаст значение переменных HTTP_HOST, HTTP_USER_AGENT, HTTP_ACCEPT, SystemRoot, SERVER_NAME, SCRIPT_FILENAME, QUERY_STRING, REQUEST_TIME и другие.

Добавить комментарий

Имя:
Текст комментария: