Понимание массивов в PHP
В этой статье вы узнаете основы массивов в PHP. Вы узнаете, как создать массив и как использовать ассоциативные и многомерные массивы, а еще увидите много примеров массивов в действии.
Что такое массив?
В PHP массив — это структура данных, которая позволяет хранить несколько элементов в одной переменной. Эти элементы хранятся в виде пар «ключ-значение». Фактически, когда нужно сохранить список элементов можно использовать массив. Почти всегда все элементы массива имеют одинаковый тип данных.
В качестве примера предположим, вы хотите сохранить имена фруктов. Без использования массива вы бы скорее всего создали несколько переменных для хранения имен разных фруктов. С другой стороны если вы используете массив для хранения имен фруктов, он может выглядеть следующим образом:
$array_fruits = array('Apple', 'Orange', 'Watermelon', 'Mango');
Как вы можете видеть, мы использовали переменную $array_fruits для хранения имен разных фруктов. Важная деталь, про которую нужно упомянуть – позже вы можете добавить больше элементов в переменную с массивом $array_fruits .
Есть много способов для манипулированием значениями в переменной массива — мы узнаем про них немного позже в этой статье.
Как создать массив
В этом разделе мы выясним, как инициализировать переменную массива и добавить значения в эту переменную.
Когда дело доходит до инициализации массива, есть несколько разных способов сделать это. В большинстве случаев языковая конструкция array() служит для создания нового массива.
$array = array();
В предыдущем фрагменте кода, переменная $array инициализируется пустым массивом.
Начиная с PHP 5.4 можно также использовать короткий синтаксис для инициализации массива.
$array = [];
Теперь давайте посмотрим, как добавлять элементы в массив.
$array = [];
$array[] = 'One';
$array[] = 'Two';
$array[] = 'Three';
echo '';
print_r($array);
Приведенный выше код выведет следующее:
Array
[0] => One
[1] => Two
[2] => Three
Обратите внимание, что индекс массива начинается с 0. Каждый раз при добавлении нового элемента в массив без указания индекса, массиву индекс присваивается автоматически.
Конечно можно также создать массив с уже добавленными значениями. Это наиболее быстрый способ объявить массив, если вы уже знаете, какие значения в нем будут.
$array = ['One', 'Two', 'Three'];
Как получить доступ к элементам массива
В предыдущем разделе мы обсуждали способы инициализации переменной массива. В этом разделе мы рассмотрим несколько различных способов доступа к элементам массива.
Первый очевидный способ доступа к элементам массива – получить их по ключу или индексу.
$array = ['One', 'Two', 'Three'];
// get the first element of the $array array
echo $array[0];
echo "
";
// get the second element of the $array array
echo $array[1];
echo "
";
// get the third element of the $array array
echo $array[2];
echo "
";
Приведенный код ваше выведет следующее:
Three
Более чистый способ написать приведенный выше код — это использовать цикл foreach для итерации по элементам массива.
$array = ['One', 'Two', 'Three'];
foreach ($array as $element)
echo $element;
echo '
';
Фрагмент кода выше даст такой же результат, но для его достижения потребовалось гораздо меньше кода.
Аналогично, вы можете также использовать цикл for для итерации по элементам массива.
$array = ['One', 'Two', 'Three'];
$array_length = count($array);
for ($i = 0; $i $array_length; ++$i)
echo $array[$i];
echo '
';
В данном случае с помощью цикла for мы перебираем каждый индекс в массиве, а затем выводим значение, хранящееся в этом индексе. В этом примере кода мы использовали одну из наиболее важных функций, которую вы в конечном итоге будете использовать при работе с массивами: count . Она используется для подсчета, сколько элементов находится в массиве.
Типы массивов в PHP
В этом разделе мы рассмотрим различные типы массива, которые можно использовать в PHP.
Численно-индексированные массивы
Массив с числовым индексом относится к категории индексированных массивов. На самом деле примеры, которые мы рассматривали до этого момента – это индексированные массивы.
Числовой индекс присваивается автоматически, когда вы его не указывается явным образом.
$array = ['One', 'Two', 'Three'];
В приведенном выше примере мы не указали индекс для каждого элемента, поэтому он будет инициализирован с числовым индексом автоматически.
Конечно, можно также создать массив с явным указанием числовых индексов, как показано в следующем примере.
$array = [];
$array[0] = 'One';
$array[1] = 'Two';
$array[2] = 'Three';
Ассоциативные массивы
Ассоциативный массив похож на числовой массив, но у вас появляется возможность использовать строковые значения для ключей массива.
Давайте посмотрим, как создать ассоциативный массив.
$employee = [
'name' => 'John',
'email' => 'john@example.com',
'phone' => '1234567890',
В качестве альтернативы можно также использовать следующий синтаксис.
$employee = [];
$employee['name'] = 'John';
$employee['email'] = 'john@example.com';
$employee['phone'] = '1234567890';
Для доступа к значениям ассоциативного массива, можно использовать цикл foreach , либо индекс.
$employee = [
'name' => 'John',
'email' => 'john@example.com',
'phone' => '1234567890',
// get the value of employee name
echo $employee['name'];
// get all values
foreach ($employee as $key => $value)
echo $key . ':' . $value;
echo '
';
Как вы можете видеть, в данном примере мы получили название через непосредственное обращение по ключу, а затем мы использовали цикл foreach для получения всех пар "ключ-значение" в массиве.
Многомерные массивы
В примерах, которые мы рассматривали, мы использовали скалярные значения в качестве элементов массива. Однако вы даже можете хранить массивы в качестве элементов внутри других массивов — это многомерный массив.
Давайте посмотрим на пример.
$employee = [
'name' => 'John',
'email' => 'john@example.com',
'phone' => '1234567890',
'hobbies' => ['Football', 'Tennis'],
'profiles' => ['facebook' => 'johnfb', 'twitter' => 'johntw']
Как вы можете видеть, ключ hobbies в массиве $employee содержит массив хобби. Кроме того, в ключе profiles находится ассоциативный массив различных профилей.
Давайте посмотрим, как можно получить значения многомерного массива.
$employee = [
'name' => 'John',
'email' => 'john@example.com',
'phone' => '1234567890',
'hobbies' => ['Football', 'Tennis'],
'profiles' => ['facebook' => 'johnfb', 'twitter' => 'johntw']
// access hobbies
echo $employee['hobbies'][0];
// Football
echo $employee['hobbies'][1];
// Tennis
// access profiles
echo $employee['profiles']['facebook'];
// johnfb
echo $employee['profiles']['twitter'];
// johntw
Как вы можете видеть, элементы многомерного массива могут быть получены с помощью индекса или ключа этого элемента в каждой части массива.
Некоторые полезные функции по работе с массивами
В этом разделе мы взглянем на несколько полезных массив функций, которые часто используются для операций с массивом.
Функция count
Функция count используется для подсчета количества элементов в массиве. Это часто полезно, если вы хотите выполнить итерацию массива с циклом for .
$array = ['One', 'Two', 'Three'];
// print the number of elements in the array
echo count($array);
// the above code should output
Функция is_array
Это одна из наиболее полезных функций для работы с массивами. Она используется для проверки, хранится ли в переменной массив или другой тип данных.
$array = ['One', 'Two', 'Three'];
// check if the variable is an array
if (is_array($array))
// perform some array operation
Вам всегда стоит использовать эту функцию, прежде чем выполнять любую операцию массива, если вы не уверены, что это массив.
Функция in_array
Если вы хотите проверить, существует ли элемент в массиве, то функция in_array как раз предназначена для этого.
$array = ['One', 'Two', 'Three'];
// check if a variable is an array
if (in_array('One', $array))
echo 'Yes';
else
echo 'No';
Первый аргумент функции in_array — элемент, который вы хотите проверить, а вторым аргументом является сам массив.
Функция explode
Функция explode разбивает строку на несколько частей и возвращает ее в виде массива. Например допустим, у вас есть строка, разделенная запятыми и вы хотите разбить ее, используя запятую в качестве разделителя.
$string = "One,Two,Three";
// explode a string by comma
$array = explode(",", $string);
// output should be an array
echo '';
print_r($array);
// output
/*Array
[0] => One
[1] => Two
[2] => Three
Первый аргумент функции explode это строка с разделителем (строка, по которой будет разбита переданная строка), а второй аргумент это сама строка.
Функция implode
Это противоположность функции explode — переданный массив и строка, по которой будет произведено объединение, и функция implode создаст строку путем объединения всех элементов массива между ними с помощью строки объединения, указанной в первом параметре.
$array = ['One', 'Two', 'Three'];
$string = implode(",", $array);
// output should be a string
echo $string;
// output: One,Two,Three
Первый аргумент функции implode является строкой объединения, а вторым аргументом является массив для объединения.
Функция array_push
Функция array_push используется для добавления новых элементов в конец массива.
$array = ['One', 'Two', 'Three'];
array_push($array, 'Four');
echo '';
print_r($array);
// output
/*Array
[0] => One
[1] => Two
[2] => Three
[3] => Four
Первый аргумент это массив, а следующие за ним аргументы это элементы, которые будут добавлены в конец массива.
Функция array_pop
Функция array_pop удаляет элемент из конца массива.
$array = ['One', 'Two', 'Three'];
$element = array_pop($array);
echo '';
print_r($array);
// output
/*Array
[0] => One
[1] => Two
Функция array_pop возвращает элемент, который удаляется из массива, так что вы можете сохранить его в переменную. Наряду с array_push эта функция полезна для реализации структур данных, таких как стеки.
Заключение
Это все, что вам нужно для начала работы с массивами в PHP. Вы узнали, как создавать массивы и получать элементы из них. Вы теперь знаете про различные типы массивов в PHP, и посмотрели в действии на некоторые из наиболее полезных встроенных PHP-функций для работы с массивами.
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Software Engineer, FSPL, India
I'm a software engineer by profession, and I've done my engineering in computer science. It's been around 14 years I've been working in the field of website development and open-source technologies. Primarily, I work on PHP and MySQL-based projects and frameworks. Among them, I've worked on web frameworks like CodeIgnitor, Symfony, and Laravel. Apart from that, I've also had the chance to work on different CMS systems like Joomla, Drupal, and WordPress, and e-commerce systems like Magento, OpenCart, WooCommerce, and Drupal Commerce. I also like to attend community tech conferences, and as a part of that, I attended the 2016 Joomla World Conference held in Bangalore (India) and 2018 DrupalCon which was held in Mumbai (India). Apart from this, I like to travel, explore new places, and listen to music!
Массивы
На самом деле массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стек, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.
Объяснение этих структур данных выходит за рамки данного справочного руководства, но вы найдете как минимум один пример по каждой из них. За дополнительной информацией вы можете обратиться к соответствующей литературе по этой обширной теме.
Синтаксис
Определение при помощи array()
Массив (тип array ) может быть создан языковой конструкцией array() . language construct. В качестве параметров она принимает любое количество разделенных запятыми пар key => value (ключ => значение).
array( key => value, key2 => value2, key3 => value3, . )
Запятая после последнего элемента массива необязательна и может быть опущена. Обычно это делается для однострочных массивов, т.е. array(1, 2) предпочтительней array(1, 2, ). Для многострочных массивов с другой стороны обычно используется завершающая запятая, так как позволяет легче добавлять новые элементы в конец массива.
Начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на [].
Пример #1 Простой массив
// Начиная с PHP 5.4
$array = [
"foo" => "bar" ,
"bar" => "foo" ,
];
?>
key может быть либо типа integer , либо типа string . value может быть любого типа.
- Строки, содержащие целое число будут преобразованы к типу integer . Например, ключ со значением "8" будет в действительности сохранен со значением 8. С другой стороны, значение "08" не будет преобразовано, так как оно не является корректным десятичным целым.
- Числа с плавающей точкой (тип float ) также будут преобразованы к типу integer , т.е. дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранен со значением 8.
- Тип bool также преобразовываются к типу integer . Например, ключ со значением true будет сохранен со значением 1 и ключ со значением false будет сохранен со значением 0.
- Тип null будет преобразован к пустой строке. Например, ключ со значением null будет в действительности сохранен со значением "".
- Массивы (тип array ) и объекты (тип object ) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны.
Пример #2 Пример преобразования типов и перезаписи элементов
$array = array(
1 => "a" ,
"1" => "b" ,
1.5 => "c" ,
true => "d" ,
);
var_dump ( $array );
?>?php
Результат выполнения данного примера:
array(1) < [1]=>string(1) "d" >
Так как все ключи в вышеприведенном примере преобразуются к 1, значение будет перезаписано на каждый новый элемент и останется только последнее присвоенное значение "d".
Массивы в PHP могут содержать ключи типов integer и string одновременно, так как PHP не делает различия между индексированными и ассоциативными массивами.
Пример #3 Смешанные ключи типов integer и string
Результат выполнения данного примера:
array(4) < ["foo"]=>string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100) >
Параметр key является необязательным. Если он не указан, PHP будет использовать предыдущее наибольшее значение ключа типа integer , увеличенное на 1.
Пример #4 Индексированные массивы без ключа
$array = array( "foo" , "bar" , "hello" , "world" );
var_dump ( $array );
?>?php
Результат выполнения данного примера:
array(4) < [0]=>string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world" >
Возможно указать ключ только для некоторых элементов и пропустить для других:
Пример #5 Ключи для некоторых элементов
$array = array(
"a" ,
"b" ,
6 => "c" ,
"d" ,
);
var_dump ( $array );
?>?php
Результат выполнения данного примера:
array(4) < [0]=>string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" >
Как вы видите последнее значение "d" было присвоено ключу 7. Это произошло потому, что самое большое значение ключа целого типа перед этим было 6.
Доступ к элементам массива с помощью квадратных скобок
Доступ к элементам массива может быть осуществлен с помощью синтаксиса array[key].
Пример #6 Доступ к элементам массива
var_dump ( $array [ "foo" ]);
var_dump ( $array [ 42 ]);
var_dump ( $array [ "multi" ][ "dimensional" ][ "array" ]);
?>
Результат выполнения данного примера:
string(3) "bar" int(24) string(3) "foo"
Замечание:
Для доступа к элементам массива могут использоваться как квадратные, так и фигурные скобки (например, $array[42] и $array означают одно и то же в вышеприведенном примере).
С PHP 5.4 стало возможным прямое разыменование массива, возвращаемого в качестве результата вызова функции или метода. Раньше приходилось использовать временные переменные.
С PHP 5.5 стало возможным прямое разыменование элементов у литерала массива.
Пример #7 Разыменование массива
function getArray () return array( 1 , 2 , 3 );
>
?php
// в PHP 5.4
$secondElement = getArray ()[ 1 ];
// ранее делали так
$tmp = getArray ();
$secondElement = $tmp [ 1 ];
// или так
list(, $secondElement ) = getArray ();
?>
Замечание:
Попытка доступа к неопределенному ключу в массиве - это то же самое, что и попытка доступа к любой другой неопределенной переменной: будет сгенерирована ошибка уровня E_NOTICE , и результат будет NULL .
Создание/модификация с помощью синтаксиса квадратных скобок
Существующий массив может быть изменен явной установкой значений в нем.
Это выполняется присвоением значений массиву array с указанием в скобках ключа. Кроме того, вы можете опустить ключ. В этом случае добавьте к имени переменной пустую пару скобок ([]).
$arr[key] = value; $arr[] = value; // key может быть integer или string // value может быть любым значением любого типа
Если массив $arr еще не существует, он будет создан. Таким образом, это еще один способ определить массив array . Однако такой способ применять не рекомендуется, так как если переменная $arr уже содержит некоторое значение (например, значение типа string из переменной запроса), то это значение останется на месте и [] может на самом деле означать доступ к символу в строке. Лучше инициализировать переменную путем явного присваивания значения.
Для изменения определенного значения просто присвойте новое значение элементу, используя его ключ. Если вы хотите удалить пару ключ/значение, вам необходимо использовать функцию unset() .
$arr [] = 56 ; // В этом месте скрипта это
// то же самое, что и $arr[13] = 56;
$arr [ "x" ] = 42 ; // Это добавляет к массиву новый
// элемент с ключом "x"
unset( $arr [ 5 ]); // Это удаляет элемент из массива
unset( $arr ); // Это удаляет массив полностью
?>
Замечание:
Как уже говорилось выше, если ключ не был указан, то будет взят максимальный из существующих целочисленных ( integer ) индексов, и новым ключом будет это максимальное значение (в крайнем случае 0) плюс 1. Если целочисленных индексов еще нет, то ключом будет 0 (ноль).
Учтите, что максимальное целое значение ключа не обязательно существует в массиве в данный момент. Оно могло просто существовать в массиве какое-то время, с тех пор как он был переиндексирован в последний раз. Следующий пример это иллюстрирует:
// Создаем простой массив.
$array = array( 1 , 2 , 3 , 4 , 5 );
print_r ( $array );
?php
// Теперь удаляем каждый элемент, но сам массив оставляем нетронутым:
foreach ( $array as $i => $value ) unset( $array [ $i ]);
>
print_r ( $array );
// Добавляем элемент (обратите внимание, что новым ключом будет 5, вместо 0).
$array [] = 6 ;
print_r ( $array );
// Переиндексация:
$array = array_values ( $array );
$array [] = 7 ;
print_r ( $array );
?>
Результат выполнения данного примера:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) Array ( ) Array ( [5] => 6 ) Array ( [0] => 6 [1] => 7 )
Полезные функции
Для работы с массивами существует достаточное количество полезных функций. Смотрите раздел функции для работы с массивами.
Замечание:
Функция unset() позволяет удалять ключи массива. Обратите внимание, что массив НЕ будет переиндексирован. Если вы действительно хотите поведения в стиле "удалить и сдвинуть", можно переиндексировать массив используя array_values() .
$a = array( 1 => 'один' , 2 => 'два' , 3 => 'три' );
unset( $a [ 2 ]);
/* даст массив, представленный так:
$a = array(1 => 'один', 3 => 'три');
а НЕ так:
$a = array(1 => 'один', 2 => 'три');
*/
?php
$b = array_values ( $a );
// Теперь $b это array(0 => 'один', 1 => 'три')
?>
Управляющая конструкция foreach существует специально для массивов. Она предоставляет возможность легко пройтись по массиву.
Что можно и нельзя делать с массивами
Почему $foo[bar] неверно?
Всегда заключайте в кавычки строковый литерал в индексе ассоциативного массива. К примеру, пишите $foo['bar'], а не $foo[bar]. Но почему? Часто в старых скриптах можно встретить следующий синтаксис:
$foo [ bar ] = 'враг' ;
echo $foo [ bar ];
// и т.д.
?>?php
This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in the future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string . For instance, if there is no defined constant named bar , then PHP will substitute in the string 'bar' and use that.
Замечание: Это не означает, что нужно всегда заключать ключ в кавычки. Нет необходимости заключать в кавычки константы или переменные, поскольку это помешает PHP обрабатывать их.
error_reporting ( E_ALL );
ini_set ( 'display_errors' , true );
ini_set ( 'html_errors' , false );
// Простой массив:
$array = array( 1 , 2 );
$count = count ( $array );
for ( $i = 0 ; $i < $count ; $i ++) echo "\nПроверяем $i : \n" ;
echo "Плохо: " . $array [ '$i' ] . "\n" ;
echo "Хорошо: " . $array [ $i ] . "\n" ;
echo "Плохо: < $array [ '$i' ]>\n" ;
echo "Хорошо: < $array [ $i ]>\n" ;
>
?>?php
Результат выполнения данного примера:
Проверяем 0: Notice: Undefined index: $i in /path/to/script.html on line 9 Плохо: Хорошо: 1 Notice: Undefined index: $i in /path/to/script.html on line 11 Плохо: Хорошо: 1 Проверяем 1: Notice: Undefined index: $i in /path/to/script.html on line 9 Плохо: Хорошо: 2 Notice: Undefined index: $i in /path/to/script.html on line 11 Плохо: Хорошо: 2
Дополнительные примеры, демонстрирующие этот факт:
// Показываем все ошибки
error_reporting ( E_ALL );
?php
$arr = array( 'fruit' => 'apple' , 'veggie' => 'carrot' );
// Верно
print $arr [ 'fruit' ]; // apple
print $arr [ 'veggie' ]; // carrot
// Неверно. Это работает, но из-за неопределенной константы с
// именем fruit также вызывает ошибку PHP уровня E_NOTICE
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in.
print $arr [ fruit ]; // apple
// Давайте определим константу, чтобы продемонстрировать, что
// происходит. Мы присвоим константе с именем fruit значение 'veggie'.
define ( 'fruit' , 'veggie' );
// Теперь обратите внимание на разницу
print $arr [ 'fruit' ]; // apple
print $arr [ fruit ]; // carrot
// Внутри строки это нормально. Внутри строк константы не
// рассматриваются, так что ошибки E_NOTICE здесь не произойдет
print "Hello $arr [ fruit ] " ; // Hello apple
// С одним исключением: фигурные скобки вокруг массивов внутри
// строк позволяют константам там находиться
print "Hello < $arr [ fruit ]>" ; // Hello carrot
print "Hello < $arr [ 'fruit' ]>" ; // Hello apple
// Это не будет работать и вызовет ошибку обработки, такую как:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Это, конечно, также действует и с суперглобальными переменными в строках
print "Hello $arr [ 'fruit']" ;
print "Hello $_GET [ 'foo']" ;
// Еще одна возможность - конкатенация
print "Hello " . $arr [ 'fruit' ]; // Hello apple
?>
Если вы переведете error_reporting в режим отображения ошибок уровня E_NOTICE (например, такой как E_ALL ), вы сразу увидите эти ошибки. По умолчанию error_reporting установлена их не отображать.
Как указано в разделе синтаксис, внутри квадратных скобок ('[' и ']') должно быть выражение. Это означает, что можно писать вот так:
echo $arr [ somefunc ( $bar )];
?>?php
Это пример использования возвращаемого функцией значения в качестве индекса массива. PHP известны также и константы:
$error_descriptions [ E_ERROR ] = "Произошла фатальная ошибка" ;
$error_descriptions [ E_WARNING ] = "PHP сообщает о предупреждении" ;
$error_descriptions [ E_NOTICE ] = "Это лишь неофициальное замечание" ;
?>?php
Обратите внимание, что E_ERROR - это такой же верный идентификатор, как и bar в первом примере. Но последний пример по сути эквивалентен такой записи:
$error_descriptions [ 1 ] = "Произошла фатальная ошибка" ;
$error_descriptions [ 2 ] = "PHP сообщает о предупреждении" ;
$error_descriptions [ 8 ] = "Это лишь неофициальное замечание" ;
?>?php
поскольку E_ERROR соответствует 1, и т.д.
Так что же в этом плохого?
Когда-нибудь в будущем, команда разработчиков PHP, возможно, пожелает добавить еще одну константу или ключевое слово, либо константа из другого кода может вмешаться и тогда у вас могут возникнуть проблемы. Например, вы уже не можете использовать таким образом слова empty и default, поскольку они являются зарезервированными ключевыми словами.
Замечание: Повторим, внутри строки ( string ), заключенной в двойные кавычки, корректно не окружать индексы массива кавычками, поэтому "$foo[bar]" является верной записью. Более подробно почему - смотрите вышеприведенные примеры, а также раздел обработка переменных в строках.
Преобразование в массив
Для любого из типов: integer , float , string , boolean и resource , преобразование значения в массив дает результатом массив с одним элементом (с индексом 0), являющимся скалярным значением, с которого вы начали. Другими словами, (array)$scalarValue - это точно то же самое, что и array($scalarValue).
Если вы преобразуете в массив объект ( object ), вы получите в качестве элементов массива свойства (переменные-члены) этого объекта. Ключами будут имена переменных-членов, с некоторыми примечательными исключениями: целочисленные свойства станут недоступны; к закрытым полям класса (private) спереди будет дописано имя класса; к защищенным полям класса (protected) спереди будет добавлен символ '*'. Эти добавленные значения с обоих сторон также имеют нулевые байты. Это может вызвать несколько неожиданное поведение:
class A private $A ; // Это станет '\0A\0A'
>
class B extends A private $A ; // Это станет '\0B\0A'
public $AA ; // Это станет 'AA'
>
var_dump ((array) new B ());
?>
Вышеприведенный код покажет 2 ключа с именем 'AA', хотя один из них на самом деле имеет имя '\0A\0A'.
Если вы преобразуете в массив значение NULL , вы получите пустой массив.
Сравнение
Массивы можно сравнивать при помощи функции array_diff() и операторов массивов.
Примеры
The array type in PHP is very versatile. Here are some examples: Тип массив в PHP является очень гибким, вот несколько примеров:
// это
$a = array( 'color' => 'red' ,
'taste' => 'sweet' ,
'shape' => 'round' ,
'name' => 'apple' ,
4 // ключом будет 0
);
?php
$b = array( 'a' , 'b' , 'c' );
// . . .полностью соответствует
$a = array();
$a [ 'color' ] = 'red' ;
$a [ 'taste' ] = 'sweet' ;
$a [ 'shape' ] = 'round' ;
$a [ 'name' ] = 'apple' ;
$a [] = 4 ; // ключом будет 0
// после выполнения этого кода, $a будет массивом
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round',
// 'name' => 'apple', 0 => 4), а $b будет
// array(0 => 'a', 1 => 'b', 2 => 'c'), или просто array('a', 'b', 'c').
?>
Пример #8 Использование array()
// Массив как карта (свойств)
$map = array( 'version' => 4 ,
'OS' => 'Linux' ,
'lang' => 'english' ,
'short_tags' => true
);
?php
// исключительно числовые ключи
$array = array( 7 ,
8 ,
0 ,
156 ,
- 10
);
// это то же самое, что и array(0 => 7, 1 => 8, . )
$switching = array( 10 , // ключ = 0
5 => 6 ,
3 => 7 ,
'a' => 4 ,
11 , // ключ = 6 (максимальным числовым индексом было 5)
'8' => 2 , // ключ = 8 (число!)
'02' => 77 , // ключ = '02'
0 => 12 // значение 10 будет перезаписано на 12
);
// пустой массив
$empty = array();
?>
Пример #9 Коллекция
$colors = array( 'red' , 'blue' , 'green' , 'yellow' );
?php
foreach ( $colors as $color ) echo "Вам нравится $color ?\n" ;
>
Результат выполнения данного примера:
Вам нравится red? Вам нравится blue? Вам нравится green? Вам нравится yellow?
Изменение значений массива напрямую стало возможным с версии PHP 5 путем передачи их по ссылке. До этого необходим следующий обходной прием:
Пример #10 Изменение элемента в цикле
// PHP 5
foreach ( $colors as & $color ) $color = strtoupper ( $color );
>
unset( $color ); /* это нужно для того, чтобы последующие записи в
$color не меняли последний элемент массива */
?php
// Обходной прием для старых версий
foreach ( $colors as $key => $color ) $colors [ $key ] = strtoupper ( $color );
>
Результат выполнения данного примера:
Array ( [0] => RED [1] => BLUE [2] => GREEN [3] => YELLOW )
Следующий пример создает массив, начинающийся с единицы.
Пример #11 Индекс, начинающийся с единицы
$firstquarter = array( 1 => 'Январь' , 'Февраль' , 'Март' );
print_r ( $firstquarter );
?>?php
Результат выполнения данного примера:
Array ( [1] => 'Январь' [2] => 'Февраль' [3] => 'Март' )
Пример #12 Заполнение массива
// заполняем массив всеми элементами из директории
$handle = opendir ( '.' );
while ( false !== ( $file = readdir ( $handle ))) $files [] = $file ;
>
closedir ( $handle );
?>?php
Массивы упорядочены. Вы можете изменять порядок элементов, используя различные функции сортировки. Для дополнительной информации смотрите раздел функции для работы с массивами. Вы можете подсчитать количество элементов в массиве с помощью функции count() .
Пример #13 Сортировка массива
sort ( $files );
print_r ( $files );
?>?php
Поскольку значение массива может быть чем угодно, им также может быть другой массив. Таким образом вы можете создавать рекурсивные и многомерные массивы.
Пример #14 Рекурсивные и многомерные массивы
$fruits = array ( "фрукты" => array ( "a" => "апельсин" ,
"b" => "банан" ,
"c" => "яблоко"
),
"числа" => array ( 1 ,
2 ,
3 ,
4 ,
5 ,
6
),
"дырки" => array ( "первая" ,
5 => "вторая" ,
"третья"
)
);
?php
// Несколько примеров доступа к значениям предыдущего массива
echo $fruits [ "дырки" ][ 5 ]; // напечатает "вторая"
echo $fruits [ "фрукты" ][ "a" ]; // напечатает "апельсин"
unset( $fruits [ "дырки" ][ 0 ]); // удалит "первая"
// Создаст новый многомерный массив
$juices [ "apple" ][ "green" ] = "good" ;
?>
Обратите внимание, что при присваивании массива всегда происходит копирование значения. Чтобы скопировать массив по ссылке, вам нужно использовать оператор ссылки.
$arr1 = array( 2 , 3 );
$arr2 = $arr1 ;
$arr2 [] = 4 ; // $arr2 изменился,
// $arr1 все еще array(2, 3)
?php
$arr3 = & $arr1 ;
$arr3 [] = 4 ; // теперь $arr1 и $arr3 одинаковы
?>
PHP: массивы
В PHP различают три вида массивов. Доступ к каждому значению массива осуществляется с помощью идентификатора, который называется индексом массива.
- Числовой — массив с числовым индексом. Хранение значений и доступ к такому массиву осуществляются линейно.
- Ассоциативный — массив со строками в качестве индекса. В нем значения элементов хранятся по ассоциации с ключевыми значениями, а не в строгом линейном порядке индексов.
- Многомерный — массив, содержащий один или несколько массивов, доступ к значениям которых осуществляется с помощью многомерных индексов.
Числовые массивы
Эти массивы могут хранить числа, строки и любые объекты, причем их индексы всегда будут представлены числами. По умолчанию индекс числового массива начинается с нуля.
Пример
Ниже приведен пример создания и доступа к числовому массиву. Для создания массива использована функция array() :
/* Первый способ создания массива. */
$numbers = array( 1, 2, 3, 4, 5);
foreach( $numbers as $value ) echo "Значение равно $value
";
>
/* Второй способ создания массива. */
$numbers[0] = "один";
$numbers[1] = "два";
$numbers[2] = "три";
$numbers[3] = "четыре";
$numbers[4] = "пять";
foreach( $numbers as $value ) echo "Значение равно $value
";
>
?>
Значение равно 1
Значение равно 2
Значение равно 3
Значение равно 4
Значение равно 5
Значение равно одному
Значение равно двум
Значение равно трем
Значение равно четырем
Значение равно пяти
Ассоциативные массивы
Ассоциативные массивы по функциональности похожи на числовые, но отличаются от них индексом. Ассоциативные массивы имеют индекс в виде строки, что позволяет установить прочную ассоциативную связь между ключами и значениями.
Числовой индексный массив будет не лучшим выбором для хранения в массиве данных о зарплатах сотрудников. Вместо этого, лучше использовать имена сотрудников в качестве ключей ассоциативного массива, тогда значениями будут соответствующие зарплаты.
ПРИМЕЧАНИЕ: Не заключайте ассоциативный массив в двойные кавычки, иначе он не вернет никакого значения.
Пример
/* Первый способ создания ассоциативного массива. */
$salaries = array("Мохаммед" => 2000, "Кадир" => 1000, "Зара" => 500);
echo "Зарплата Мохаммеда ". $salaries['Мохаммед'] . "
";
echo "Зарплата Кадира ". $salaries['Кадир']. "
";
echo "Зарплата Зары ". $salaries['Зара']. "
";
/* Второй способ создания массива. */
$salaries['Мохаммед'] = "высокая";
$salaries['Кадир'] = "средняя";
$salaries['Зара'] = "низкая";
echo "Зарплата Мохаммеда ". $salaries['Мохаммад'] . "
";
echo "Зарплата Кадира ". $salaries['Кадир']. "
";
echo "Зарплата Зары ". $salaries['Зара']. "
";
?>
Зарплата Мохаммеда 2000
Зарплата Кадира 1000
Зарплата Зары 500
Зарплата Мохаммада высокая
Зарплата Кадира средняя
Зарплата Зары низкая
Многомерные массивы
В многомерном массиве каждый элемент основного массива также может быть массивом. И каждый элемент в подмассиве может быть массивом, и так далее. Доступ к значениям в многомерном массиве осуществляется с помощью многомерного индекса.
Пример
В приведенном ниже примере создан двумерный массив для хранения оценок трех студентов по трем предметам.
Это пример ассоциативного массива. Вы можете создать числовой массив таким же образом:
$marks = array(
"Мохаммад" => array (
"физика" => 35,
"математика" => 30,
"химия" => 39
),
"Кадир" => array (
"физика" => 30,
"математика" => 32,
"химия" => 29
),
"Зара" => array (
"физика" => 31,
"математика" => 22,
"химия" => 39
)
);
/* Оценка значений многомерных массивов */
echo "Оценки Мохаммада по физике : " ;
echo $marks['Мохаммад']['физика'] . "
";
echo "Оценки Кадира по математике: ";
echo $marks['Кадир']['математика'] . "
";
echo "Оценки Зары по химии : " ;
echo $marks['Зара']['химия'] . "
";
?>
Оценки Мохаммада по физике : 35
Оценки Кадира по математике : 32
Оценки Зары по химии : 39
- Как мой 10-летний сын выучил Javascript
- Ключевые PHP-операторы
- Как использовать PHP для вывода данных?
Синтаксис — PHP: Массивы
Перед тем, как изучать синтаксис работы с массивами, стоит понять его суть на логическом уровне. Для этого достаточно здравого смысла. Массивом в программировании считают любые списки или коллекции элементов, будь то курсы на Хекслете, сайты в поисковой выдаче, друзья в вашей любимой социальной сети. Задача массива — представить такие списки в виде единой структуры, которая позволяет работать с ними как с единым целым.
Определение массива
$animals = ['cats', 'dogs', 'birds'];
Массив представляет собой список элементов, заключенных в квадратные скобки. В примере выше происходит определение массива ['cats', 'dogs', 'birds'] и присваивание его переменной $animals . PHP позволяет создавать массив из разнотипных данных, то есть чисто технически можно создать и такой массив:
$values = [null, 'one', 4, 'two', false];
На практике такой подход лучше не использовать. Для разнотипных данных обычно, хорошо подходит ассоциативный массив, которому посвящен следующий курс.
Кроме того, можно создать и пустой массив:
$animals = [];
Как правило, пустой массив используют в ситуации, когда мы работаем с коллекцией, но значения отсутствуют. Такой подход позволяет избежать условных проверок на то, является ли данное значение массивом. Либо его используют в алгоритмах, которые постепенно наполняют массив в процессе своей работы.
(Для любознательных: массив в PHP — динамическая структура. Ее можно расширять прямо в процессе работы программы. В языках близких к железу, таких как Си, размер массива — постоянная величина. При необходимости расширения в подобных языках создают новый массив).
Получение данных
Каждый элемент в массиве имеет порядковый номер, называемый индексом. Индексация массива начинается с нуля. То есть первый элемент массива доступен по индексу 0 , второй — по индексу 1 , и так далее.
Для извлечения элемента из массива, необходимо использовать специальный синтаксис. Он заключается в том, что после переменной, содержащей массив, ставятся квадратные скобки с индексом между ними:
$animals = ['cats', 'dogs', 'birds']; $animals[0]; // cats $animals[1]; // dogs $animals[2]; // birds
Обратите внимание: последний индекс в массиве всегда меньше размера массива на единицу. Получить размер массива можно функцией count (у нее есть псевдоним: sizeof ):
$animals = ['cats', 'dogs', 'birds']; count($animals); // 3
В алгоритмических задачах индекс обычно вычисляется динамически, поэтому обращение к конкретному элементу происходит с использованием переменных:
$i = 1; $animals = ['cats', 'dogs', 'birds']; $animals[$i]; // dogs
$i = 1; $j = 1; $animals = ['cats', 'dogs', 'birds']; $animals[$i + $j]; // birds
Такой вызов возможен по одной простой причине. Внутри скобок ожидается выражение, и, как мы уже знаем, там, где ожидается выражение, можно подставлять все, что вычисляется, в том числе вызовы функций.
Довольно часто в задачах с использованием массивов нужно взять последний элемент. Для этого вычисляется последний индекс массива по формуле размер_массива - 1 , по которому и можно обратиться к последнему элементу:
$animals = ['cats', 'dogs', 'birds']; $animals[count($animals) - 1]; // birds
Индекс последнего элемента вычисляется по формуле: размер массива - 1 . Соответственно, в коде она реализуется так: count($animals) - 1 . На практике очень напрягает каждый раз писать такой код, поэтому через некоторое время мы познакомимся со специальной библиотекой, позволяющей работать с коллекциями намного более эффективно по сравнению со стандартными средствами.
Изменение элементов массива
Здесь все просто. Синтаксис такой же, как и при обращении к элементу массива с добавлением присвоения нового значения:
$animals = ['cats', 'dogs', 'birds']; $animals[0] = 'horses'; print_r($animals); // => ['horses', 'dogs', 'birds']
Также не забывайте про выход за границу. Изменять нужно только существующие элементы.
Добавление элемента в массив
То же самое, что и изменение, но в качестве индекса ничего не указывается.
$animals = ['cats', 'dogs', 'birds']; $animals[] = 'horses'; print_r($animals); // => ['cats', 'dogs', 'birds', 'horses']
Удаление элемента из массива
Для удаления элемента массива в PHP есть специальная языковая конструкция unset .
$animals = ['cats', 'dogs', 'birds']; unset($animals[1]); print_r($animals); // => ['cats', 'birds']
Синтаксически ее применение выглядит как функция, но если вы попробуете использовать ее как выражение, то PHP выдаст ошибку:
$animals = ['cats', 'dogs', 'birds']; $result = unset($animals[1]); // PHP Parse error: syntax error, unexpected 'unset' .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
