Как вывести первый элемент php массива
Если массив нумерованный, т.е. индексы от 0 до N, можно обратиться по индексу элемента и распечатать с помощью print_r. Начиная с 7.3 версии можно получить ключ первого элемента с помощью array_key_first
$a = [1, 2, 3, 4]; print_r($a[0]); # => 1 $firstKey = array_key_first($numWords); print_r($firstKey); # => "zero" print_r($numWords[$firstKey]); # => 0
Массивы в PHP
Массивы — это один из наиболее популярных типов данных. На реальных проектах сайтов они являются лучшим помощником разработчика. Давайте создадим пустой массив. Это можно сделать несколькими способами:
Можно создать не пустой массив, а содержащий элементы. Элементами массива могут быть практически любые типы данных. Попробуем заполнить массив числами и словами:
Получился массив, который содержит 5 элементов. Чтобы получить значение одного из них, необходимо выбрать его по ключу. Если массив не ассоциативный, то ключи ставятся автоматически, начиная с нуля. Приведём пример обращения:
Можно самостоятельно задать ключи массива. К примеру, зададим ключи в виде произвольных чисел. Чтобы задать ключ элемента массива, необходим поставить его название и после него значок =>:
'Сыр', 6 => 'Мышь', 7 => 15, 8 => 'Кот', 9 => 18); echo $a[5]; // результат: 'Сыр' echo $a[6]; // результат: 'Мышь' echo $a[9]; // результат: '18' ?>
Рассмотрим способы добавления элемента в массив. Возьмём массив из последнего примера и добавим в него произвольные элементы несколькими разными способами:
'Сыр', 6 => 'Мышь', 7 => 15, 8 => 'Кот', 9 => 18); $a[10] = 'Котята'; // добавит элемент в массив с ключом 10 и значением 'Котята' $a[] = 'молоко'; // добавит в конец массива элемент со значением 'молоко' array_push($a, 35); // добавит в конец массива элемент со значением 35 ?>
Теперь разберёмся как удалять элементы массива. Попробуем удалить первый и последний элемент. А так же элемент с определённым ключом:
Массивы с числами в виде ключей сами по себе довольно бесполезны. Давайте же сделаем массив, который может встретиться в реальном проекте. К примеру, массив, который возникает в процессе авторизации пользователя на сайте. В этом массиве будут храниться логин, мэйл и пароль пользователя. Обычно такой массив делается во время приёма данных от пользователя, после ввода их в форму входа на сайт. И давайте сразу запишем массив в столбик для наглядности. С точки зрения PHP это не вызовет ошибки, но позволит нам лучше воспринимать информацию. В добавок вместо ключей-цифр поставим текст:
'mouse', 'email' => 'mouse@mousedc.ru', 'password' => 'best_password' ); echo $a['login']; // результат: 'mouse' echo $a['email']; // результат: 'mouse@mousedc.ru' echo $a['password']; // результат: 'best_password' ?>
Такие массивы с текстовыми ключами называются ассоциативными. В программировании сайтов они встречаются намного чаще, чем массивы без ключей или с ключами-цифрами. Они сильно облегчают жизнь программистам.
Обратите внимание, что в ключах ассоциативных массивов лучше ставить латинские буквы. Кириллица может вызвать проблемы и непредсказуемое поведение PHP. Так же как и названия переменных, написанные кириллицей.
Попробуем усложнить задачу — сделаем массив внутри массива. Это вполне законно с точки зрения PHP. Попробуем сделать вложенный массив в примере выше. Он будет находиться под ключом ‘info’. Запишем в него данные пользователя:
'mouse', 'email' => 'mouse@mousedc.ru', 'password' => 'best_password', 'info' => array( 'name' => 'Mouse', 'color' => 'gray', ), ); echo $a['login']; // результат: 'mouse' echo $a['info']['name']; // результат: 'Mouse' ?>
Можно сделать массив с любым уровнем вложенности.
Строку в массив и обратно
Существуют функция explode, которая позволяет быстро создать массив из строки. Это довольно популярная функция, она часто используется в проектах. Приведём пример её использования:
'; print_r($b); echo '
'; ?>
В первый параметр функции explode ставится разделитель, по которому строка будет разделена на элементы массива. Это может быть точка, запятая, пробел или любой другой символ, который есть в строке. Если разделитель не будет найден в строке, то будет возвращён массив с одним элементом, в котором будет вся строка. Если же разделитель встречается в строке, то она будет разделена на элементы массива. Результат из примера выше будет таким:
Array ( [0] => Тише [1] => мыши [2] => кот на крыше )
Существует функция implode. По своей работе она противоположна explode и тоже часто используется в проектах. Эта функция объединяет элементы массива в строку. Первым параметром в этой функции ставится строка-соединитель, которая будет между элементами. Соединителем может быть любой символ, даже пробел и пустая строка (то есть без соединителя, все элементы будут слеплены):
Результат будет таким:
Тише, мыши, кот на крыше
Массивы в php
Массивы в PHP (как и в других языках) представляют собой коллекцию связанных вместе значений. Например в виде массива можно представить меню в ресторане (название блюда — цена) или количество проживающих в городах страны жителей (город страны — количество жителей). Как пояснялось в этой статье, переменная представляет из себя именнованный контейнер в памяти, содержащий определённо значение. В этом смысле массив, это контейнер содержащий множество значений.
Организация массива
Как писалось выше, массив состоит из элементов, каждый из которых имеет ключ и значение. Например массив содержащий информацию о ценах в ресторанном меню может выглядеть так:
| Ключ | Значение |
|---|---|
| breakfast | 700 |
| dinner | 1500 |
| supper | 1100 |
Массив может иметь только один элемент с заданным ключом, т.е. в приведённом выше массиве не может быть двух элементов с ключом dinner . При попытке «добавить» второй dinner , мы просто перезапишем значение уже существующего элемента. В данном примере мы рассмотрели наиболее частый случай организации массива, а именно в виде ассоциативного. Ассоциативный массив удобнее использовать в коде, т.к. его ключи имеют осмысленные наименования (ассоциируются с какими-то частями приложения или данными которые обрабатывает скрипт). Но есть более простой пример массив, это числовые массивы. При их создании не нужно указывать ключ, он задаётся автоматически в виде целого числа, начиная с нуля.
| Ключ | Значение |
|---|---|
| 0 | 700 |
| 1 | 1500 |
| 2 | 1100 |
Рассмотрим пример:
//Пример создания ассоциативного массива $menuPrice = [ 'breakfast' => 700, 'dinner' => 1500, 'supper' => 1100 ]; //Пример создания «числового» массива $prices = [700, 1500, 1100];
В первом случае элементы массива представляют из себя пару ключ-значение, где в качестве ключа используются строковые названия «блюд» (приёмов пищи на самом деле, но пусть будет блюд), а значение это цена блюда. Во втором же случае я указал только цены, при этом интерпретатор PHP автоматически проставит ключи элементам массива.
Операции с массивами
Один из случаев ключевой операции с массивами, а именно его создание мы рассмотрели выше. А как ещё можно создать массив? Самый простой случай, это создание пустого массива:
//Создаём пустой массив $array = [];
Создание и модификация массива
Пустой массив может служить заготовкой под определённую коллекцию данных. Конечно его можно не определять заранее и создать прямо в цикле где он должен заполняться, но тогда это будет менее понятный код.
Вы так же можете заполнить массив на лету, например данными из базы данных:
//Заполняем массив данными из БД $users = []; //. некая выборка значения, например пользователей users while($user = $db->query('SELECT * FROM users')->fetch(PDO::FETCH_ASSOC))
Перебор массивов
С другой стороны готовый массив можно перебрать и например вывести его элементы на экран:
-
‘; foreach ($week as $key => $day) < echo '
- ‘. $day .»; > echo ‘
Вообще в php существует больше 70 функций для работы с массивами, однако в большинстве случаев вы будет использовать не больше двадцати. Приведу некоторые из них:
- in_array — проверяет присутствие элемента в массиве
- key_exists — проверяет присутствует ли в массиве указанный ключ или индекс
- array_search — осуществляет поиск заданного значения в массиве и возвращает ключ первого найденного значения
- array_merge — объединяет 2 и более массивов в один
- array_chunk — разбивает массив на части
Сортировка массива
Отдельным блоком может идти операции связанные с сортировкой массив. В PHP существует несколько встроенных функций для быстрой сортировки массивов, например по возрастанию/убыванию значения или в алфавитном порядке. Причём сортировка может идти как по ключам массива так и по значениям. Одной из интересных возможностей предоставляет функция usort() , при помощи которой вы можете отсортировать элементы массива используя собственный алгоритм сравнения. Рассмотрим пример:
//Пользовательская функция сравнения элементов массива function compare($a, $b) < if ($a == $b) < return 0; >return ($a < $b) ? -1 : 1; >//Заданный массив с числами идущими не по порядку $numbers = [3, 2, 5, 6, 1]; //Вызываем функцию usort() передав ей массив и имя нашей пользовательской функции сравнения usort($numbers, 'compare');
В результате выполнения данного примера получим такой массив:
array(5) < [0]=>int(1) [1]=>int(2) [2]=>int(3) [3]=>int(5) [4]=>int(6) >
Как вы понимаете данный пример максимально упрощён. Но внутри вашей функции compare() можно реализовать любой алгоритм сравнения элементов. Главное правильно возвращать значение, ноль — если элементы не отличаются и их не надо менять местами и 1 или -1 если нужно изменить порядок элементов.
Вы так же можете пробросить в тело функции compare() внешнюю переменную используя анонимную функцию и ключевое слово use :
//Пользовательская функция сравнения элементов массива $params = ['min_value'=>0, 'max_value'=>3]; function compare($params) < return function ($a, $b) use ($params) < if ($a == $b) < return 0; >if($a < $b && $a >= $params['min_value'] && $a else < return 1; >>; > //Заданный массив с числами идущими не по порядку $numbers = [3, 2, 5, 6, 1]; //Вызываем функцию usort() передав ей массив и имя нашей пользовательской функции сравнения usort($numbers, compare($params));
Как видите теперь compare() принимает параметры $params и возвращает анонимную функцию в которой уже реализован ваш алгоритм сравнения в котором используются переданные параметры. Результат при таком алгоритме изменится:
array(5) < [0]=>int(1) [1]=>int(2) [2]=>int(3) [3]=>int(6) [4]=>int(5) >
Грубо говоря сортировка по возрастанию шла пока значение $a попадало в диапазон от 0 до 3-х. Более подробно о сортировке массивов читайте в отдельной статье.
Объединение массивов
Для объединения двух и более массивов в php предусмотрена функция array_merge() . Она создаёт новый массив последовательно присоединяя массивы.
//Фрукты $fruits = [ 'Яблоки', 'Апельсины', 'Грушки' ]; //Овощи $vegetables = [ 'Картофель', 'Огурцы', 'Помидоры' ]; //Объединяем массивы $plants = array_merge($fruits, $vegetables); echo ''; print_r($plants); echo '';
Array ( [0] => Яблоки [1] => Апельсины [2] => Грушки [3] => Картофель [4] => Огурцы [5] => Помидоры )Разделение массива на части
Чтобы разделить массив на части, используйте функцию array_chunk() принимающую 2 аргумента, сам массив и число указывающее на то, по сколько частей делить исходный массив. Функция создаст новый многомерный массив, разделённый на части.
//Фрукты $fruits = [ 'Яблоки', 'Апельсины', 'Грушки', 'Слива', 'Персик', 'Абрикос', 'Алыча', 'Вишня', 'Черешня', ]; $arr = array_chunk($fruits, 3); //Делим массив, оставляя в каждом подмассиве 3 элемента из исходного echo ''; print_r($arr); echo '';
Array ( [0] => Array ( [0] => Яблоки [1] => Апельсины [2] => Грушки ) [1] => Array ( [0] => Слива [1] => Персик [2] => Абрикос ) [2] => Array ( [0] => Алыча [1] => Вишня [2] => Черешня ) )В исходном массиве 9 элементов, мы делим его на массивы по 3 элемента в каждом, получаем в итоге 3 массива. Если исходный массив не делится поровну, последний подмассив, будет содержать то, что осталось в исходном после разделения на предыдущие. Например если в данном примере в качестве второго аргумента передать array_chunk() число 4 получим такой результат:
Array ( [0] => Array ( [0] => Яблоки [1] => Апельсины [2] => Грушки [3] => Слива ) [1] => Array ( [0] => Персик [1] => Абрикос [2] => Алыча [3] => Вишня ) [2] => Array ( [0] => Черешня ) )2 массива по 4 элемента и 1 с оставшимся одним элементом.
Получение элементов массива
Помимо обычного перебора или обращения по индексу или ключу, в php предусмотрен набор функций для получения определённых элементов или частей массива.
Получить первый элемент массива
Функция current() получает первый элемент массива, точнее элемент на который в данный момент указывает внутренний указатель массива. По умолчанию первый элемент.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', 'Четвёртый элемент', 'Пятый элемент', 'Шестой элемент', 'Седьмой элемент', 'Восьмой элемент', 'Девятый элемент', 'Десятый элемент', ]; //По умолчанию первый элемент var_dump(current($arr));string(27) "Первый элемент"Однако мы можем сдвинуть указатель функциями next() , prev() и получить другой результат.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', 'Четвёртый элемент', 'Пятый элемент', 'Шестой элемент', 'Седьмой элемент', 'Восьмой элемент', 'Девятый элемент', 'Десятый элемент', ]; //Сдвинем внутренний указатель на 2 шага next($arr); next($arr); var_dump(current($arr));string(27) "Третий элемент"Функция reset() сбросит указатель опять на первый элемент.
Получить последний элемент массива
Опять работаем с указателями, функция end() поставит указатель на последний элемент массива.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', 'Четвёртый элемент', 'Пятый элемент', 'Шестой элемент', 'Седьмой элемент', 'Восьмой элемент', 'Девятый элемент', 'Десятый элемент', ]; var_dump(end($arr));string(29) "Десятый элемент"Получить часть массива
В php предусмотрена возможность получить часть (срез) массива. Основано на внутенних индексах элементов массива, подобно работе со строками, мы передаём функции array_slice($arr, $offest, $length) три аргумента, наш массив $arr индекс $offest элемента с которого нужно начать делать срез и $leng th — длину среза.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', 'Четвёртый элемент', 'Пятый элемент', 'Шестой элемент', 'Седьмой элемент', 'Восьмой элемент', 'Девятый элемент', 'Десятый элемент', ]; $slice = array_slice($arr, 2, 5); echo ''; print_r($slice); echo '';
Array ( [0] => Третий элемент [1] => Четвёртый элемент [2] => Пятый элемент [3] => Шестой элемент [4] => Седьмой элемент )Если $length будет больше чем количество элементов оставшихся в массиве с индекса $offset , мы просто получим массив до конца.
Извлечь первый элемент из массива
Иногда при обработке массивов, нам нужно не просто получить его элемент, но при этом и удалить его в исходном массиве, чтобы он не участвовал в последующих операциях над массивом. Для этого предусмотрена функция array_shift() — извлекает и возвращает первый элемент массива.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', ]; $firstItem = array_shift($arr); echo $firstItem . '
'; echo ''; print_r($arr); echo '';
Первый элемент Array ( [0] => Второй элемент [1] => Третий элемент )Извлечь последний элемент из массива
Есть аналог array_shift(), функция array_pop() — извлекает последний элемент из массива и возвращает его значение
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', ]; $firstItem = array_pop($arr); echo $firstItem . '
'; echo ''; print_r($arr); echo '';
Третий элемент Array ( [0] => Первый элемент [1] => Второй элемент )Извлечь часть элементов из массива
Подобную операцию можно провернуть над частью массива, предварительно получив срез с помощью array_slice() а затем воспользовавшись array_diff() мы получим разницу между исходным массивом и срезом.
$arr = [ 'Первый элемент', 'Второй элемент', 'Третий элемент', ]; $slice = array_slice($arr, 0, 2); //Срез $diff = array_diff($arr, $slice); //Разница между срезом и исходным массивом echo ''; print_r($slice); echo ''; echo '
'; print_r($diff); echo '';
Array ( [0] => Первый элемент [1] => Второй элемент ) Array ( [2] => Третий элемент )Так иногда решают задачи не стандартной сетки в вёрстке, когда в первой строке выводится 2 элемента, во второй 3, начиная с 3-й строки по 4. Можно предварительно попилить массив с товарами на такие отрезки и удобно в цикле выводить их на странице.
Выбрать все значений массива
Для получения всех значений массива (игнорируя ключи) используется функция array_values(), она создаёт новый массив со стандартными числовыми ключами (0, 1, 2 . ) оставляя в новом массиве только значения.
$arr = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3', ]; $values = array_values($arr); echo ''; print_r($values); echo '';
Array ( [0] => value1 [1] => value2 [2] => value3 )Выбрать все ключи массива
Аналогично значениям, вы можете получить только ключи массива.
$arr = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3', ]; $values = array_keys($arr); echo ''; print_r($values); echo '';
Array ( [0] => key1 [1] => key2 [2] => key3 )Получить случайное значение из массива
Если вы пишите программу лотереи а призы харните в массиве, воспользуйтесь функцией array_rand() чтобы отдать игроку случайны приз, она получает и возвращает случайны индекс массива.
$arr = [ 'пусто', 'пусто', 'пусто', 'Автомоболь!', 'пусто', 'пусто', ]; var_dump($arr[array_rand($arr)]);string(10) "пусто"Эх, повезёт в следующий раз.
Глобальные массивы
В PHP начиная с версии 4 ввели такой сущность как «суперглобальные массивы». Это особые переменные доступные в любой части приложения и содержат информацию, например о состоянии сервера (массив $_SERVER) сессии, куках или переданных от пользователя запросах, одним словом о состоянии среды выполнения приложения. На данный момент в PHP доступно девять суперглобальных массивов:
| Наименование | Описание массива |
| $GLOBALS | Этот массив содержим все переменные объявленные в скрипте, при этом имена переменных являются ключами этого массива. |
| $_SERVER | Данный массив содержит всю информацию о сервере, а так же настройки среды в которой выполняется скрипт |
| $_GET | Массив переменных переданных PHP скрипту по средствам GET запроса (через адресную строку браузера или другими методами, например curl()) |
| $_POST | Так же как и GET содержит переданные скрипту переменные, только уже методом POST |
| $_COOKIE | Содержим coockies-ы пользователя |
| $_REQUEST | Объединяет в себе массивы $GET, $POST и $COOKIE. Не рекомендуется использовать, не безопасно, хотя и удобно. |
| $_FILES | Содержим список файлов загружаемых на сервер через веб-формы (имя, временный путь, размеры и т.д.) |
| $_ENV | Содержит переменные окружения в котором запущен PHP скрипт |
| $_SESSION | В данном массиве содержаться все переменные сессии текущего пользователя |
Чаще всего, вы будете сталкиваться с массивами $_GET и $_POST т.к. с их помощью в скрипты на сервере передаются данные от клиентской части (через веб-формы).
Многомерные массивы
Как вы уже знаете, элементы массива могут содержать в качестве значения данные любого типа, строки, числа, логические, в том числе и другие массивы. Массив состоящий из других массивов называется многомерным или вложенным массивом. На практике используется 2-3 уровня вложенности для хранения каких-либо связанных структурных данных (например данных о покупателях магазина или каталоге товаров), обработка массивов большей вложенности усложняется и используется не часто.
Давайте разберёмся как создавать и взаимодействовать с многомерными массивами.
Создание многомерных массивов
В первую очередь создадим простой двумерный массив сотрудников организации:
//Многомерный массив сотрудников $multilevelArray1 = [ [ 'username'=>'Александр', 'age' => 32, 'position' => 'Программист' ], [ 'username'=>'Анастасия', 'age' => 33, 'position' => 'Логопед' ], [ 'username'=>'Елена', 'age' => 29, 'position' => 'Бухгалтер' ] ];
Массив $multilavelArray содержим в себе три других массива описывающих некоторые параметры сотрудников, а именно имя, возраст и должность. Эти данные могли бы быть получены из БД или сложной веб-формы.
Обратите внимание что в «родительском» массиве мы не указывали символьных ключей, поэтому массивам внутри были просто присвоены числовые индексы 0, 1, 2. Давайте теперь распределим наших сотрудников по отделам и добавим ещё одного сотрудника.
//Многомерный массив сотрудников $multilevelArray2 = [ 'DEPARTMENT_IT' => [ [ 'username'=>'Александр', 'age' => 32, 'position' => 'Программист' ] ], 'DEPARTMENT_EDUCATION'=> [ [ 'username'=>'Анастасия', 'age' => 33, 'position' => 'Логопед' ] ], 'DEPARTMENT_FINANCE' => [ [ 'username'=>'Екатерина', 'age' => 39, 'position' => 'Главный бугалтер' ], [ 'username'=>'Елена', 'age' => 29, 'position' => 'Бухгалтер' ] ] ];
Теперь мы имеем многомерный массив в котором на «первом уровне» хранятся отделы компании, а уже внутри отделов сотрудники. При этом отдел имеет символьный ключ, например DEPARTMENT_IT — отдел IT. Немного усложним наш пример и добавим информацию о наименовании отделов и времени работы, а сотрудников отдела поместим на уровень ниже:
$multilevelArray3 = [ 'DEPARTMENT_IT' => [ 'TITLE' => 'It отдел', 'WORK_TIME' => 'с 09:00 до 23:00', 'STAFF' => [ [ 'username'=>'Александр', 'age' => 32, 'position' => 'Программист' ] ] ], 'DEPARTMENT_EDUCATION'=> [ 'TITLE' => 'Отдел образования и развития', 'WORK_TIME' => 'с 08:00 до 17:00', 'STAFF' => [ [ 'username'=>'Анастасия', 'age' => 33, 'position' => 'Логопед' ] ] ], 'DEPARTMENT_FINANCE' => [ 'TITLE' => 'Отдел бухгалтерии', 'WORK_TIME' => 'с 09:00 до 18:00', 'STAFF' =>[ [ 'username'=>'Екатерина', 'age' => 39, 'position' => 'Главный бухгалтер' ], [ 'username'=>'Елена', 'age' => 29, 'position' => 'Бухгалтер' ] ] ] ];
Как видите используя многомерные массивы можно строить довольно сложные структуры данных с которыми в последствии предстоит работать нашему веб-приложению.
Доступ к элементам многомерного массива
Рассмотрим как получить доступ к элементам многомерного массива. В качестве примера возьмём выше описанные массивы сотрудников компании. Но перед этим предлагаю набросать небольшую функцию, которая позволит удобно просматривать содержимое переменных в вашем коде. Я часто использую её в работе:
/** * Обёртка для print_r() и var_dump() * @param $val - значение * @param string $name - заголовок * @param bool $mode - использовать var_dump() или print_r() * @param bool $die - использовать die() после вывода */ function print_p($val, $name = 'Содержимое переменной', $mode = false, $die = false)< echo ''.(!empty($name) ? $name.': ' : ''); if($mode) < var_dump($val); >else < print_r($val); >echo ''; if($die) die; >
Эта функция простая обёртка для просмотра содержимого переменной при помощи print_r() или var_dump() тегов
.. Берите на вооружение.
И так, давайте узнаем имена и возраст всех сотрудников из первого двумерного массива:
echo 'Сотрудники компании
'; foreach ($multilevelArray1 as $key => $item) < echo 'Имя: ' . $item['username'] . ' должность: ' . $item['position'] . '
'; >В результате выполнения этого кода, получим такой список в html:
Представьте что мы не знаем что содержится в переменной $multilevelArray3 , но нас просят как-то представить структуру компании на странице «О компании». Тут нам пригодится функция print_p() описанная выше. Вызовем следующий код:
//Просмотр переменной $multilevelArray3 print_p($multilevelArray3, 'Структура компании', true);
В результате, на экране мы увидим такое сообщение:
Мы видим что в $multilevelArray3 хранится многоуровневый массив, на первом уровне которого находятся разделы компании с описанием, а внутри разделов по ключу STAFF доступен массив сотрудников этого отдела. Зная это мы можем написать следующий код, чтобы представить структуру компании:
Получим такую страницу:
Таким образом можно вывести например страницу контактов сайта, на которой должны быть «координаты» должностных лиц отвечающих за то или иное направление деятельности компании. Оформление сами понимаете зависит от вашей фантазии и дизайна сайта.
Обработка многомерного массива
Один из примеров обработки массива был представлен выше, когда мы просто вывели на экран содержимое многомерного массива в удобном для пользователя виде. Однако это далеко не всё что можно делать с массивами. Например мы можешь осуществить некий поиск по элементам узнать сколько сотрудников старше 30 лет работает в нашей компании:
//Количество искомых сотрудников $counter = 0; //Обработка каждого элемента массива array_walk_recursive( $multilevelArray3, function ($value, $key) use (&$counter) < if($key == 'age')< if($value >30) < $counter++; >> >, $counter); echo 'Количество сотрудников старше 30 лет: ' . $counter;Здесь мы применили функцию array_walk_recursive() которая обходит каждый элемент массива вне зависимости от его вложенности и применяет к элементу пользовательскую функцию. В данном случае лямбда функция проверяет что текущий элемент это возраст и что его значение больше 30 и наращивает определённый во вне счётчик. Чтобы получить доступ в область видимости где применён счётчик используется конструкция use и ссылка на переменную &$counter . В результате вы увидите сообщение: Количество сотрудников старше 30 лет: 3.
Существует множество примеров обработки массивов в PHP, но они выходят за рамки данной статьи.
Как удалить элемент массива в PHP?
Одним из мощнейших инструментов PHP-разработчика являются массивы. Если вы работали с массивами в других языках программирования (Delphi, Fortrain, C++), то помните, что везде массив надо объявлять, указывая размерность и тип элементов. В PHP всё обстоит иначе.
Дело в том, что в PHP массив не является линейным объектом. Это, по сути, хеш-массив, представляющий собой набор пар — ключей с их значениями.
Теперь давайте посмотрим, как удалять элементы из хеш-массива в PHP. В вышеупомянутых языках программирования для таких действий придётся создавать специальный объект, односвязный либо 2-связный список, бережно выделять и освобождать память, наблюдать за восстановлением связей в списке. Что касается PHP, то тут весь необходимый «менеджмент» спрятан, но всегда готов к применению.
1. Удаляем элемент массива в PHP
Чтобы удалить элемент в PHP, достаточно всего лишь знать его ключ — в таком случае удаление будет сведено к вызову функции unset() :
php $a = array('a','b','c'); unset($a[1]); //удаляем элемент с ключом «1» print_r($a); //на экране отобразится: Array ( [0] => a [2] => c ) ?>2. Как удалить 1-й элемент массива?
Если не знаем ключ, но знаем, что удалять надо 1-й элемент массива, подойдёт функция array_shift() . Она извлечёт значение 1-го элемента, удалит его из массива и выполнит перенумерацию числовых ключей, начав с нуля.
php $stack = array(3 => 'a', 5 => 'b', 'third element' => 'c'); $elm = array_shift($stack); print_r($stack); //на экране отобразится: Array ( [0] => b [third element] => c ) ?>В нашем случае 1-й элемент удаляется, а элемент 5 => ‘b’, попадает под перенумерацию. Что касается элементов со строковыми ключами, то их перенумерация не затронет.
3. Как удалить последний элемент массива?
Схожим образом выполняют удаление последнего элемента массива. Для этого в PHP есть функция array_pop() .
php $stack = array(3 => 'a', 5 => 'b', 'third element' => 'c'); $elm = array_pop($stack); print_r($stack); //на экране отобразится: Array ( [3] => a [5] => b ) ?>После удаления последнего элемента массива в PHP перенумерация оставшихся элементов не выполняется.
4. Как удалить пустые элементы из массива?
Сначала вспомним, что называют пустым элементом. Лучше всего определить «пустое значение» помогает результат работы функции empty() . Функция возвратит true для пустого элемента, причем не только скалярного. Убедимся в этом на примере ниже:
php $stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00'); foreach ($stack as $k => $v) if (empty($v)) unset($stack[$k]); print_r($stack); //на экране отобразится : Array ( [3] => a [5] => b [3rd] => c [12] => 00 ) ?>Итак, мы в цикле проверим каждый элемент массива, используя функцию empty() и удалим пустые элементы. Здесь важно понять, что строковый скаляр ‘0’ — тоже пустой элемент. А вот ’00’ пустым не является.
Если считаете, что поэлементная проверка массива — неоптимальный вариант, воспользуйтесь функцией сравнения массивов в PHP — array_diff() , перечислив с её помощью все элементы, которые считаем «нулевыми»:
php $stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00', ' '); $stack = array_diff($stack, array(array(), null, false, 0, '', '0', '00', ' ')); print_r($stack); //на экране отобразится: Array ( [3] => a [5] => b [3rd] => c ) ?>Очевидно, что данный способ более гибок.
5. Удаляем повторяющиеся элементы массива в PHP
Порой возникает необходимость удалить повторяющиеся элементы массива в PHP. Для решения этой задачи существует специальная функция под названием array_unique() :
php $stack = array('a', 'b', 'b', 'c', 'c', 0, '0'); $stack = array_unique($stack); print_r($stack); //на экране отобразится: Array ( [0] => a [1] => b [3] => c [5] => 0 ) ?>Из кода видно, что функция удалила из PHP-массива повторяющиеся элементы. При этом функция имеет ещё один параметр, указывающий, как сравнивать элементы.
Возможные типы сравнения: • SORT_REGULAR — сравнение без преобразования типа элементов; • SORT_STRING — сравнение как строки; • SORT_NUMERIC — сравнение как чисел (пытаемся преобразовать в число); • SORT_LOCALE_STRING — сравнение как строки, но с учётом выбранного набора символов.
По умолчанию применяется SORT_STRING. Выбирая типы сравнения, помните, что это важно. Давайте изменим тип в прошлом примере на SORT_NUMERIC:
php $stack = array('a', 'b', 'b', 'c', 'c', 0, '0'); $stack = array_unique($stack, SORT_NUMERIC); print_r($stack); //на экране отобразится: Array ( [0] => a ) ?>Во время сравнения все элементы массива были преобразованы к численному типу скаляра. В нашем случае это неизменно давало значение ноль, в результате чего у нас остался лишь первый элемент.
Хотите знать о PHP больше? Записывайтесь на курс «Backend-разработчик на PHP»!


