Как не крути а сколько я не работал с PHP, я постоянно возвращался к тому, что стыкался с массивами во время программирования. Они значительно упрощают жизнь так как не нужно создавать тысячу переменных, в них можно хранить очень много данных да и так вышло, что при работе с базой данных я получаю именно массив данных (а иначе и никак), который уже позже могу вывести на экран как мне угодно.
Ниже я накидал очень огромное количество тем которые попытаюсь разобрать в рамках одной статьи и при этом максимально схватить понимание того как работают массивы. Потому уверенно скажу, что если ты пересмотришь этот материал от и до, то в итоге мы увидим нового человека “виртуоза массивов”, ну или просто человека который хорошо разбирается в этой теме.
Сразу хочу сказать, что существует несколько видов массивов, но при этом нужно понимать каждый, хотя я правда постараюсь описать это как можно проще.
В PHP, существует 3 вида массивов, а именно обычный, ассоциативный и объекты.
Последний активно используется в ООП, ну и в целом он достаточно удобный, ну а мы начнем с малого!
Обычный массив
Обычный массив удобен тем, что мы по факту создаем лишь одну переменную в которой можем хранить сотни и тысячи различных переменных, например мы можем создать переменную новости, и хранить в ней все новости недели или месяца (да хоть тысячелетия).
Такой массив очень простой и выглядит он следующим образом:
$numbers = array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
Сейчас у нас есть одна переменная которая содержит 10 переменных, а для того чтобы вывести любое из их значений нужно использовать переменную и указать в ней индекс, он начинается с нуля и делается это следующим образом:
echo $numbers[5];
// Вывод: 13
Как я и говорил, начинается индекс с нуля, мы указываем его в квадратных скобочках, потому пусть мы указали внутри 5, число находится на 6-й позиции, потому и вывелось число 13.
Как видите простой массив уж очень простой, и учить его сильно не придется, хотя сразу скажу что вместо цифр можно хранить и текст тоже:
$numbers_str = array('one', 'two', 'three', 'four', 'five');
Ассоциативный массив
Ассоциативный массив когда я начинал мне казался достаточно непростой штукой, но лишь до тех пор пока я просто не сел и не разобрался в нем. Самое важное в этом массиве, что мы имеем такое понятие в нем как ключ и значение.
Это значительно упрощает всю работу с массивами, так как здесь уже не нужно будет угадывать индекс данного элемента а просто назвать его по имени, давайте я типичный ассоциативный массив:
$news = array(
'id' => 10,
'title' => 'post 1',
'description' => 'description 1',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020',
);
Но сразу скажу, что ассоциативные массивы могут быть многомерными, это такие когда мы имеем массив в массиве, который может тоже иметь массив. А пока давайте я покажу чем удобем обычный ассоциативный массив.
Вопервых как видно, мы уже имеем поля, которые могут иметь имя, например title, давайте я покажу как можно его вывести на экран:
echo $news['title'];
// post 1
Вот так мы можем указать всякие имена которые есть внутри массива, и при этом получить его значение, если что я это делаю сейчас при помощи команды echo.
Но давайте я покажу все-таки то как может выглядеть многомерный массив, для общего развития:
$newses = array(
array(
'id' => 10,
'title' => 'post 1',
'description' => 'description 1',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
array(
'id' => 11,
'title' => 'post 2',
'description' => 'description 2',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
array(
'id' => 12,
'title' => 'post 3',
'description' => 'description 3',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
array(
'id' => 13,
'title' => 'post 4',
'description' => 'description 4',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
);
Самые внимательные сразу видят, есть массив, внутри которого есть много массивов, ну а дальше мы уже можем с ними работать, это я покажу немного ниже, главное понимать как он выглядит! А пока двигаемся дальше…
Объекты как массив в php
Этот вид массивов (да я их называю массивами!), отличается своим удобством хотя работает абсолютно также как и ассоциативные массивы. Но все-же работать с ними значительно проще, скажу я вам в свое время я почему-то их сильно боялся, не знаю почему — страшные наверное, хотя милые как котики.
Вот покажу их следующий вид:
$newses_object = (object)array(
(object)array(
'id' => 10,
'title' => 'post 1',
'description' => 'description 1',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
(object)array(
'id' => 11,
'title' => 'post 2',
'description' => 'description 2',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'),
);
Только не смейтесь, все что у нас здесь поменялось, это я указал тип object, но все же есть разница в следующей работе.
Если вызов ассоциативного массива выглядел вот так:
echo $newses[0][title];
То объект нужно вызывать иначе
echo $newses_object->{'0'}->title;
Думаю разница на лицо, но сразу понятно как вызывать его индекс и как вызывать поле по ключу. Но это лишь начало и дальше я расскажу еще больше интересного!
Основы
Сразу хочу чтобы ты понимал, что от версии к версии массивы и работа с ними немного менялись с целью упростить работу с ними. И тот способ который я выше указал работает на всех версиях PHP, но тот который я покажу ниже, работает на php 7 и выше.
$newses = [
[
'id' => 10,
'title' => 'post 1',
'description' => 'description 1',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'],
[
'id' => 11,
'title' => 'post 2',
'description' => 'description 2',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'],
[
'id' => 12,
'title' => 'post 3',
'description' => 'description 3',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'],
[
'id' => 13,
'title' => 'post 4',
'description' => 'description 4',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'],
];
То есть получилось, что синтаксис сократили и очень даже неплохо сократили заменив array()
на []
. Но при этом он также просто воспринимается. Но все-таки что хочу отметить что в php существует очень много различных (готовых) функций для работы с массивами, и пожалуй если я буду рассматривать возможности каждой то эта статья получится не только очень длинной но и местами сложной для восприятия.
Обычно я все очень просто могу загуглить. К примеру мне нужно сделать так, чтобы в моем массиве отсеялись все повторяющиеся значения. Для этого имеется крутая функция array_unique и используется она следующим образом:
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
Взял этот пример из документации php.net, так как максимально понятный и простой. А результат получается следующий:
Array
(
[a] => green
[0] => red
[1] => blue
)
И таких функций целый список, чтобы было проще вот полный список, там их реально много, можно такой список я сделаю в ближайшем будущем но пока так!
Сортировка массивов
Решил уделить этому пункту особое внимание, так как часто бывает нужно как-то построить порядок данных, и как ни странно эти функции могут быть использованы, хотя с другой стороны если я получаю данные из базы данных, то проще и легче делать сортировку внутри базы данных, а дальше просто вывожу как мне нужно.
И первая функция которую хочу выделить array_reverse. Позволяет полностью перевернуть массив вверх-тормашками, чаще всего могу его использовать.
$input = array("php", 4.0, array("green", "red"));
$reversed = array_reverse($input);
Вот собственно и пример как его использовать, к тому же некоторые функции имеют дополнительные параметры, их тоже можно увидеть в документации как и примеры ее использования.
Но есть и другие интересные виды сортировок, давайте сразу выделю самые интересные с помощью таблицы.
Разновидности сортировки в зависимости от префиксной буквы:
- a, сортировка, сохраняющая отношения между ключами и значениями
- k, сортировка по ключам
- r, сортировка в прямом/обратном порядке
- u, сортировка при помощи пользовательской функции
Доступны комбинации видов сортировки:
В целом по этой таблице все очень просто, а на сами функции я сделал специально ссылки, чтобы было проще получить информацию и примеры как работать с этим делом.
Вывод содержимого массивов
Вывод массивов в php осуществляется несколькими способами, я к примеру чаще использую функцию var_dump, но также можно использовать print_r.
Ну и конечно же это не весь вывод, ведь для нормального и полноценного вывода также можно использовать циклы типа for и foreach.
Давайте просто рассмотрим каждый пример по отдельности, для того чтобы понимать как работает вывод этих массивов.
Вывод массива с помощью var_dump
Часто использую этот метод с целью посмотреть что я получаю внутри массива и какой массив я имею. Реально безотказная штука, так как вместе с содержимым «ключ» => «значение» я получаю также и тип данных который имеет строка.
Давайте рассмотрим типичный массив и какую строку мы получим на выводе:
$newses = [
[
'id' => 10,
'title' => 'post 1',
'description' => 'description 1',
'img' => 'https://allfrontend.online/img.png',
'date' => '10.10.2020'],
];
// Вывод:
array(1) { [0]=> array(5) { ["id"]=> int(10) ["title"]=> string(6) "post 1" ["description"]=> string(13) "description 1" ["img"]=> string(34) "https://allfrontend.online/img.png" ["date"]=> string(10) "10.10.2020" } }
Получается, что мы вывели все содержимое и точно знаем какие переменные есть у пассива, ну и как для процесса программирования становится понятно и каких нет, если мы подразумевали, что он должен быть там.
Кому как, а я обычно просто смотрел что там, дальше понятно удаляем эту функцию и дальше программируем, но все-же есть ребята которые используют аналог var_dump, и называется он print_r. Давайте его рассмотрим.
Вывод массива с помощью print_r
Возьмем тот-же массив с такими же ключами и значениями и я просто пока что мы получаем на выходе, для того чтобы не дублировать одно и тоже самое.
Array ( [0] => Array ( [id] => 10 [title] => post 1 [description] => description 1 [img] => https://allfrontend.online/img.png [date] => 10.10.2020 ) )
И мы видим, что вывод значительно отличается, если в первом случае мы видели четкое деление с помощью фигурных скобок, а также тип данных который имеет значение и конечно же количество символов, то здесь мы просто получаем информацию “ключ” => “значение” и все.
В моем случае именно из-за дополнительной информации я активно использую var_dump, но все-таки этот выбор я делаю лишь для себя.
Вывод массива с помощью foreach
Этот способ уже используется тогда когда мы точно знаем, что в массиве и выводим для пользователя все данные которые там есть. Это может быть к примеру лента новостей.
Берем самый длинный массив который я выставлял выше, и просто пишем вот такой небольшой код, кто не против в нем я даже использую html, для того чтобы понимать структуру.
foreach ($newses as $value) {
?>
<div id="<?=$value['id']?>">
<h2><?=$value['title']?></h2>
<p><?=$value['description']?></p>
<span class="date"><?=$value['date']?></span>
</div
<?php
}
Результат:
И в итоге, мы получаем блок с данными внутри, похожий на новость, в принципе все просто, но когда я только начинал и не знал, что программисты пытаются упростить свою жизнь и не пишут велосипеды ради простого вывода, я извращался с помощью for.
У меня получалась интересная конструкция но в целом если подумать она ведь тоже выполняет свою функцию, пусть так делать и не нужно.
Вывод массива с помощью for
В целом на размер кода это не сильно повлияло, но мы точно заморочились, вот сам код:
for($i=0;$i<count($newses);$i++) {
?>
<div id="<?=$newses[$i]['id']?>">
<h2><?=$newses[$i]['title']?></h2>
<p><?=$newses[$i]['description']?></p>
<span class="date"><?=$newses[$i]['date']?></span>
</div>
<?php
}
Заморочка в чем? Мы должны точно понимать, сколько элементов внутри массива, для этого используем count, дальше создаем итератор который будет добавлять +1, и как-бы хардкодом выводить значения массива. В целом это реально бесполезное действие, проще было бы если бы при использовании foreach, мы бы в скобках указали что-то типа:
foreach ($newses as $key => $value) {
// код
}
В таком случае мы просто получаем порядок внутри массива, и если это просто сгенерированный базой данных массив, там даже будет порядковый номер, который скорее всего начинается с нуля, но мы всегда можем добавить ему единичку.
Заключение
В принципе это все, мы рассмотрели и сами массивы и то как можно выводить массивы в php. В целом это самые распространенные методы но если вдруг ты знаешь какой-то еще, можешь написать в комментариях либо связаться со мной, форма обратной связи у меня имеется.
Очень рад был показать и разобраться в этой теме, если тебе был полезен этот пост, то я очень приветствую помощь — просто кликни поделиться этой статьей и выставь ее где-нибудь у себя в соц. сети.
Метки: php, массивы, программирование