Массивы в php: как работать с массивами, вывод массивов в PHP

Как не крути а сколько я не работал с 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, сортировка при помощи пользовательской функции

Доступны комбинации видов сортировки:

akru
aasortarsortuasort
kksortkrsort
rarsortkrsortrsort
uuasortusort

В целом по этой таблице все очень просто, а на сами функции я сделал специально ссылки, чтобы было проще получить информацию и примеры как работать с этим делом.

Вывод содержимого массивов

Вывод массивов в 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. В целом это самые распространенные методы но если вдруг ты знаешь какой-то еще, можешь написать в комментариях либо связаться со мной, форма обратной связи у меня имеется.

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

Метки: , ,

Оставьте комментарий