26.08.2017   807
Массивы в PHP: урок с примерами

Изучаем массивы в PHP

Давайте разберемся, что же такое массив в PHP. Массив – это просто группа каких-то значений, представленных как единое целое. Представьте себе корзину с фруктами. В ней лежат банан, апельсин, яблоко и виноград. В PHP можно представить такую структуру в виде массива. Корзина – это сам массив, а конкретные фрукты – это его элементы.

Давайте теперь создадим в папке с нашим проектом файл для наших экспериментов с массивами. Назовём его arrays.php.

Объявляется массив в PHP с помощью квадратных скобок, вот так:

<?php
$fruits = [];

Вот так мы создали пустой массив.

В старом коде можно встретить пример такого определения массива:

$fruits = array();

Сейчас такая запись является устаревшей, использовать её не стоит!

Можно также создать массив, в котором уже будут какие-либо значения. Это делается так:

$fruits = ['apple', 'orange', 'grape'];

Вывести получившийся массив можно с помощью уже известной нам функции var_dump:

<?php

$fruits = ['apple', 'orange', 'grape'];
var_dump($fruits);

И давайте запустим этот наш скрипт, открыв в браузере: http://myproject.loc/arrays.php
Мы увидим следующее:

C:\OpenServer\domains\myproject.loc\www\arrays.php:4:
array (size=3)
  0 => string 'apple' (length=5)
  1 => string 'orange' (length=6)
  2 => string 'grape' (length=5)

Нумерованные массивы

Array – это тип объекта, а именно массив. Size=3 – это размерность массива (содержит 3 элемента). 0, 1, 2 – это ключи массива, которые также называются индексами. По этим ключам хранятся значения, в нашем случае эти значения – строки. Как мы можем видеть, ключи массива нумеруются с нуля, и далее просто увеличиваются на единицу.

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

Например, чтобы получить нулевой элемент массива (с ключом 0), мы должны сделать следующее:

<?php

$fruits = ['apple', 'orange', 'grape'];

echo $fruits[0];

Результат этого кода:

apple

Давайте получим элемент с индексом 2:

<?php

$fruits = ['apple', 'orange', 'grape'];

echo $fruits[2];

Результат:

grape

Если же мы попытаемся получить элемент с несуществующим индексом, например – 3:

<?php

$fruits = ['apple', 'orange', 'grape'];

echo $fruits[3];

То мы получим warning о том, что элемент с таким ключом не найден.
Ошибка при получении несуществующего элемента массива

Добавление и удаление элементов массива

Давайте добавим ещё один элемент в массив, для этого используется следующая конструкция:

$fruits[] = 'mango';

Давайте после этого снова посмотрим на наш массив с помощью var_dump:

<?php

$fruits = ['apple', 'orange', 'grape'];

$fruits[] = 'mango';

var_dump($fruits);

Результат – ещё один элемент с индексом 3:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7:
array (size=4)
  0 => string 'apple' (length=5)
  1 => string 'orange' (length=6)
  2 => string 'grape' (length=5)
  3 => string 'mango' (length=5)

Для удаления элементов массива используется конструкция unset. Давайте удалим элемент с индексом 2:

<?php

$fruits = ['apple', 'orange', 'grape'];

$fruits[] = 'mango';

unset($fruits[2]);

var_dump($fruits);

Результат этого кода:

C:\OpenServer\domains\myproject.loc\www\arrays.php:9:
array (size=3)
  0 => string 'apple' (length=5)
  1 => string 'orange' (length=6)
  3 => string 'mango' (length=5)

Как мы видим, элемента с индексом 2 больше нет, и образовалась «дырка» в порядковых номерах ключей. Если теперь добавить новый элемент, то у него индекс будет равен 4, но эта дыра по-прежнему останется. Это работает именно так и об этом нужно помнить.

И снова вернёмся к ключам

Вообще говоря, эти ключи можно задать самому, ещё при создании массива. Вот так:

<?php

$fruits = [5 => 'apple', 3 => 'orange', 9 => 'grape'];

var_dump($fruits);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:5:
array (size=3)
  5 => string 'apple' (length=5)
  3 => string 'orange' (length=6)
  9 => string 'grape' (length=5)

Как мы видим, ключи теперь – это 5, 3 и 9.
Если теперь добавить элемент в массив, то у него будет индекс, на единицу больше максимального числового значения ключа:

<?php

$fruits = [5 => 'apple', 3 => 'orange', 9 => 'grape'];

$fruits[] = 'mango';

var_dump($fruits);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7:
array (size=4)
  5 => string 'apple' (length=5)
  3 => string 'orange' (length=6)
  9 => string 'grape' (length=5)
  10 => string 'mango' (length=5)

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

<?php

$fruits = [5 => 'apple', 3 => 'orange', 9 => 'grape'];

$fruits[20] = 'mango';

var_dump($fruits);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7:
array (size=4)
  5 => string 'apple' (length=5)
  3 => string 'orange' (length=6)
  9 => string 'grape' (length=5)
  20 => string 'mango' (length=5)

Если значение по такому ключу уже есть в массиве, оно просто заменится новым. Например, давайте заменим яблоко на манго:

<?php

$fruits = [5 => 'apple', 3 => 'orange', 9 => 'grape'];

var_dump($fruits);

$fruits[5] = 'mango';

var_dump($fruits);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:5:
array (size=3)
  5 => string 'apple' (length=5)
  3 => string 'orange' (length=6)
  9 => string 'grape' (length=5)

C:\OpenServer\domains\myproject.loc\www\arrays.php:9:
array (size=3)
  5 => string 'mango' (length=5)
  3 => string 'orange' (length=6)
  9 => string 'grape' (length=5)

Ассоциативные массивы

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

<?php

$article = ['title' => 'Название статьи', 'text' => 'Текст статьи'];
$article['author'] = 'Имя автора';

var_dump($article);

Результат работы этого кода:

C:\OpenServer\domains\myproject.loc\www\arrays.php:6:
array (size=3)
  'title' => string 'Название статьи' (length=29)
  'text' => string 'Текст статьи' (length=23)
  'author' => string 'Имя автора' (length=19)

Отлично, а теперь мы можем использовать это внутри HTML-разметки:

<?php
$article = [
    'title' => 'Название статьи',
    'text' => 'Текст статьи',
    'author' => 'Автор статьи'
];
?>
<html>
<head>
    <title><?= $article['title'] ?></title>
</head>
<body>
<h1><?= $article['title'] ?></h1>
<p><?= $article['text'] ?></p>
<p><?= $article['author'] ?></p>
</body>
</html>

Результат:
Вывод информации из массива

Многомерные массивы

Помните, в начале урока я сказал, что по ключам массива хранятся какие-то значения, и в нашем случае это строки. Так вот, элементом массива, вообще говоря, может являться что угодно. Даже сам массив. =)

Давайте на примере нашей статьи – у автора может быть имя и фамилия. И мы хотим хранить их отдельно друг от друга. Тогда автор – это массив с двумя ключами – first_name и last_name.
Давайте сделаем это:

<?php
$article = [
    'title' => 'Название статьи',
    'text' => 'Текст статьи',
    'author' => [
        'first_name' => 'Иван',
        'last_name' => 'Иванов'
    ]
];
var_dump($article);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:10:
array (size=3)
  'title' => string 'Название статьи' (length=29)
  'text' => string 'Текст статьи' (length=23)
  'author' => 
    array (size=2)
      'first_name' => string 'Иван' (length=8)
      'last_name' => string 'Иванов' (length=12)

Вот так всё просто, article – это массив, у которого по ключу author – тоже находится массив.
Чтобы получить имя автора нужно использовать следующий код:

<?php
$article = [
    'title' => 'Название статьи',
    'text' => 'Текст статьи',
    'author' => [
        'first_name' => 'Иван',
        'last_name' => 'Иванов'
    ]
];
echo $article['author']['first_name'];

Сначала в массиве $article получили значение по ключу author, этим значением оказался массив. А затем уже из этого массива получили значение по ключу first_name. И результат этого кода, разумеется:

Иван

Давайте теперь используем эти значения в уже использованном нами шаблоне:

<?php
$article = [
    'title' => 'Название статьи',
    'text' => 'Текст статьи',
    'author' => [
        'first_name' => 'Иван',
        'last_name' => 'Иванов'
    ]
];
?>
<html>
<head>
    <title><?= $article['title'] ?></title>
</head>
<body>
<h1><?= $article['title'] ?></h1>
<p><?= $article['text'] ?></p>
<p><?= $article['author']['first_name'] . ' ' . $article['author']['last_name'] ?></p>
</body>
</html>

Результат:
Вывод ассоциативного массива

Разумеется, можно и внутри этого значения создать массив, а внутри него – ещё один, пока не надоест.

На этом с массивами всё, в следующем уроке мы научимся с ними работать более интересно – изучим циклы и функции для работы с ними. За новыми уроками следите в наших группах в социальных сетях, ссылки на них вы найдёте в шапке сайта. Если этот урок был вам полезен, расскажите об этом курсе своим знакомым или поделитесь на него ссылкой в социальных сетях. Также, если вы хотите помочь проекту материально – вы можете стать патроном проекта – это самые преданные и благодарные читателей, которые вносят неоценимый вклад в развитие проекта. А данный урок вышел при поддержке патрона Евгения Акопяна. Спасибо!

Домашнее задание
Для просмотра нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности

Комментарии

 trialex3 2017-09-07 20:17:56
+1

<?php
$article = [
    'ios' => 'iOS',
    'android' => [
        'Google' => [
            'opn' => 'Open Android', 'gaps' => 'Google services'
        ],
        'Samsung', 'Sony', 'LG'
    ],
    'wp' => 'Windows Phone'
];
var_dump ($article);
echo $article['android']['Google'] ['opn'];

Ответить
 SBTesla 2017-10-10 07:33:54
+1

<?php
$articles = [ 0 => 'news', 1 => 'title', 2 => 'number', 3 => [
    0 => 'Author', 1 => 'name', 2 => 'date', 3 => [
        0 => 'numberTitle', 1 => 'numberArticle'
    ]
] ];

$articles[3][3][2] = 'numberTipes';
var_dump($articles);

Ответить
  •  ivashkevich 2017-10-10 16:01:23
    0

    А зачем вы цифры обернули в кавычки? И начинайте нумерацию всегда с нуля.

    Ответить
 WarLikeLaux 2017-11-10 13:45:32
0

enter image description here

Ответить
 serb2017 2017-11-14 12:57:46
+1

<?php
$array3 = [1,2,3,4,5];
$array2 = [$array3,'m2'];
$array1 = [1,2,$array2];
var_dump($array1);
echo $array1[2][0][4];

Ответить
Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности