Чат веб-разработчиков
Массивы в PHP: урок с примерами

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

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

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

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

Код доступен только после покупки курса PHP для начинающих.

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

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

Код доступен только после покупки курса PHP для начинающих.

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

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

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

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

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

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

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

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

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

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

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

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

Код доступен только после покупки курса PHP для начинающих.

Результат:

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

Код доступен только после покупки курса PHP для начинающих.

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

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

В следующем уроке мы рассмотрим более сложные и интересные примеры работы с массивами.

Читайте также
Комментарии


trialex3
trialex3
<?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'];
ivashkevich
ivashkevich

Всё хорошо тут, норм)

SBTesla
SBTesla
<?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
ivashkevich

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

WarLikeLaux
WarLikeLaux

enter image description here

ivashkevich
ivashkevich

Вместо array() нужно использовать [].

WarLikeLaux
WarLikeLaux

Инициализация массива через [] не работает, ошибку выдает.

ivashkevich
ivashkevich

Пришлите ваш код, в котором возникает ошибка, посмотрю что не так.

WarLikeLaux
WarLikeLaux
<?php
$fruits = ['apple', 'orange', 'grape'];
WarLikeLaux
WarLikeLaux

Parse error: syntax error, unexpected '[' in Z:\home\test.org\www\index.php on line 2

ivashkevich
ivashkevich

Разобрались, была старая версия PHP - 5.2.

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

И так тоже можно)

1nSide
1nSide

Как-то так)

$arrList = [
    'author'=>['first_name'=>'Петя', 'last_name'=>'Иванов'],
    'placeOfResidence'=>['street'=>'Пушкинская','house'=>'192'],
    'dateOfBirth' => ['number'=> '23', 'month'=> '05','year' => '2018']

];

?>
    <html>
    <head>
    </head>
    <body>
    <p>Инициалы: <?= $arrList['author']['first_name'] . ' ' . $arrList['author']['last_name']  ?></p>
    <p>Место проживания: <?= $arrList['placeOfResidence']['street'] . ' ' . $arrList['placeOfResidence']['house'] ?></p>
    <p>Дата рождения: <?= $arrList['dateOfBirth']['number'] . ' ' . $arrList['dateOfBirth']['month'] . ' ' . $arrList['dateOfBirth']['year']?></p>
    </body>
</html>
1nSide
1nSide

Вложил еще один массив, насколько я понял просто в предвидящей задачи сделал просто двойной массив, вложил еще один и заодно разобрался с функцией рандома =)

<?php

$arrList1 = [
    'author'=>[$arrList2 = ['id'=> 'Айди карта№: '], $arrList3 = ['first_name'=>'Петя','Вася','Вова','Гоша','Миша'], $arrList4 = ['last_name'=>'Иванов','Гречкин','Пяточкин'],],
    'placeOfResidence'=>['street'=>'Пушкинская','house' => (random_int(1,200))],
    'dateOfBirth' => ['number'=> random_int(1,30), 'month'=> random_int(1,12),'year' => ' 2018'],
];

$randName = array_rand($arrList3,2);
$randLastName = array_rand($arrList4,2)

?>
    <html>
    <head>
    </head>
    <body>
    <p><?= $arrList2 ['id'],random_int(0,20)?></p>
    <p>Инициалы: <?= $arrList3[$randName[1]] . ' ' . $arrList4[$randLastName[1]]  ?></p>
    <p>Место проживания: <?= $arrList1['placeOfResidence']['street'] . ' ' . $arrList1['placeOfResidence']['house'] ?></p>
    <p>Дата рождения: <?= $arrList1['dateOfBirth']['number'] . ' ' . $arrList1['dateOfBirth']['month'] . ' ' . $arrList1['dateOfBirth']['year']?></p>
    </body>
</html>
ivashkevich
ivashkevich

То что разобрались - хорошо, но что-то у вас тут слишком всё сложно и гораздо больше чем требовалось :)
Я ни разу не против, чтобы вы самостоятельно что-то изучали что-то дополнительно. Наоборот - это круто!
Но давайте в комментариях к заданиям всё же будем писать только то, что требуется, иначе мне будет очень сложно разбираться в каких-то не относящихся к уроку вещах.
Надеюсь на ваше понимание :)

1nSide
1nSide
<?php

$arrays = [ 'первый', 0 =>['второй', 0=> ['третий']]];

echo $arrays[0][0][0];
//var_dump($arrays);
ivashkevich
ivashkevich

А теперь добавьте в уже созданный массив новый элемент, на третьем уровне вложенности.

1nSide
1nSide
$arrays = ['один',0=>[ 1=>'два',2=>'три',1=>[1=>'четыри', 2=>'пять']]];

echo $arrays[0][1][1];
var_dump($arrays);
ivashkevich
ivashkevich

Видимо, я как-то не так объяснил, что нужно. Я ожидал следующего:

//тут создаём какой-то массив
$a[0][0][] = 'Новое значение на третьем уровне вложенности';
marner
marner

Так правильно?

<?php
$article = [
    'title' => 'Название статьи',
    'books' => [
        0=> 'Идиот',
        1=> 'Война и мир'],
    'author' =>[
    1=>['last_name'=>'Достоевский','first_name'=>'Фёдор'],
    2 =>['last_name'=>'Толстой','first_name'=>'Лев'],
]

    ];
?>
<html>
<head>
    <title><?= $article['title'] ?></title>
</head>
<body>
<h1><?= $article['title'] ?></h1>
<p><?= $article['books'][0] ?></p>
<p><?= $article['author'][1]['first_name'] . ' ' . $article['author'][1]['last_name'] ?></p>
</body>
</html>
ivashkevich
ivashkevich

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

PatarKing
PatarKing
$myArray = [15,25,[25,12,['Last index',21]]];

echo $myArray[2][2][0];
ivashkevich
ivashkevich

Как добавить теперь в уже готовый массив вот на этот уровень:

['Last index',21]

ещё один элемент, чтобы в результате стало вот так:

['Last index',21,23]
Fox-24
Fox-24

Благодарствую за урок.

$automobiles = [
    'Car' => 'BMW',
    'Model' => 'X5',
    'Engine' => [
        'Type' => 'Diesel',
        'Volume' => '1.8',
        'Power' => [
            'Horse' => '180',
            'Kilowatts' => '132'
        ]
    ]
];

$automobiles['Engine']['Power']['Newton metre'] = '132';

?>
<html>
<head>
    <title><?= $automobiles['Car'] ?></title>
</head>
<body>
<h1>Автомобиль: <?= $automobiles['Car'] ?></h1>
<h2>Модель: <?= $automobiles['Model'] ?></h2>
<p>Тип двигателя: <?= $automobiles['Engine']['Type'] ?></p>
<p>Лошадиных сил: <?= $automobiles['Engine']['Power']['Horse'] ?></p>
<p>Ньютон метров: <?= $automobiles['Engine']['Power']['Newton metre'] ?></p>
</body>
</html>
ivashkevich
ivashkevich

Отличная домашка! =)

Fox-24
Fox-24

Спасибо!) Стараюсь :)

AxLT
AxLT

Если правильно понял, смысл домашки был не просто в том что бы создать массив с 3х сложным уровнем вложения, но и добавить потом новый элемент в самый низкий уровень. Вот что получилось:

<?php
$phone = [
    'iOS' => 'Apple',
    'Android' => [
        'Xiaomi' => 'China',
        'Sumsung' => [
            'SumsungDuos' => 'China',
            'SumsungGalaxy' => 'England'
        ]
        ],
    'LG' => 'phone'
];

$phone ['Android'] ['Sumsung']['New'] = 'Click here';
var_dump($phone);
echo $phone ['Android'] ['Sumsung'] ['SumsungDuos'];
ivashkevich
ivashkevich

Да, всё правильно!

Olga
Olga

Мой лист покупок)

<?php
$shoppingList =[
        'dairy'=>[
                'milk'=>'Mlch',
            'butter'=>'Butter',
            'eggs'=>'Eier'
        ],
    'meat'=>[
            'steak' =>'Steak',
        'sausage'=> 'Wurst'
    ],
    'vegetables_and_fruits' =>[
            'fruits' =>[
            'orange' => 'Orange',
        'mango'=>'Mango',
        'apple'=>'Apfel'
    ],
           'vegetables' =>[
            'potato' => 'Kartofeln',
        'cabbage' => 'Kohl'
            ],
        ],
    'bakery' => [
            'bread' => 'Brot'
    ]
        ];
var_dump ($shoppingList);
?>
<html>
<head>
    <title>Einkaufsliste:</title>
</head>
<body>
<h1>Einkaufsliste</h1>
<h2>1.Milchprodukte:</h2>
<p><?=$shoppingList['dairy']['milk'].', '.$shoppingList['dairy']['butter'].', '. $shoppingList['dairy']['eggs']?></p>
<h2>2.Fleisherei: </h2>
<p><?=$shoppingList['meat']['steak'].', '.$shoppingList['meat']['sausage']?></p>
<h2> 3.Obst und Gemüse. </h2>
<h3> 3.1 Obst:</h3>
<p><?=$shoppingList['vegetables_and_fruits']['fruits']['orange'].', '.$shoppingList['vegetables_and_fruits']['fruits']['mango'].', '.$shoppingList['vegetables_and_fruits']['fruits']['apple']?></p>
<h3> 3.2 Gemüse: </h3>
<p><?=$shoppingList['vegetables_and_fruits']['vegetables']['potato'].', '.$shoppingList['vegetables_and_fruits']['vegetables']['cabbage']?></p>
<h2> 4.Bäckarei:</h2>
<p><?=$shoppingList['bakery']['bread']?></p>
</body>
</html>
stasokulov@gmail.com
stasokulov@gmail.com
<?php
$animals = ['fishes' => 'tuna','amphibians' => 'salamander','mammals' => ['primates' => 'human','dogs' => 'wolf','feline' => [1 => 'tiger', 2 => 'leon'] ] ];

var_dump($animals);

echo "<br><br>";

$animals['mammals']['feline'][3] = 'cat';

var_dump($animals);
vadymbilyi@gmail.com
vadymbilyi@gmail.com

Зачем назначать ключи? Можно просто сделать так:

<?php
$animals = [
    'fishes' => 'tuna',
    'amphibians' => 'salamander',
    'mammals' => [
       'primates' => 'human',
        'dogs' => 'wolf',
        'feline' => ['tiger', 'leon'] ]
];

var_dump($animals);

echo "<br><br>";

$animals['mammals']['feline'][] = 'cat';

var_dump($animals);
?>