Как и в других языках программирования, массивы в РНР используются для группировки данных под общим именем. Однако понятие массива используется в несколько ином смысле.
Считается, что каждый элемент массива имеет две характеристики:
а) значение — это хранимая элементом информация,
б) ключ — служебная информация, которая уникально идентифицирует значение элемента.
Ключи могут быть целыми числами или строками. Массивы с целочисленными ключами называются скалярными массивами.
Массивы, у которых в роли ключей используются (литералы) символьные строки, называются ассоциативными.
В РНР различие между скалярными и ассоциативными массивами внешнее, так как внутреннее представление обоих типов массивов — списочное.
Каждый элемент массива — это переменная, а в РНР переменные не типизированы. Поэтому массивы РНР могут одновременно хранить числа, строки или даже другие массивы, т.е. значения разных типов.
Имена массивов, как и переменных, должны начинаться со знака доллара ($).
Библиотека РНР имеет две функции для получения использованных в массиве ключей и занесенных в него значений: и
array_keys( имя_массива ) и array_values( имя_массива ).
Обе функции возвращают информацию в виде проиндексированных числами массивов.
Количество элементов в массиве можно вычислить с помощью функции
count( имя_массива )
или аналогичной ей sizeof().
Операторы для вывода информации о структуре и
Значениях объектов данных
В РНР имеются функции, позволяющих выводить информацию о переменных и других элементах данных, включая структурированные, такие как массивы и объекты. Эта информация бывает очень полезна при отладке программы.
а) Функция print_r.
Отображает информацию о переменной. Если функции передается переменная, содержащая строку или число, то выводится значение переменной.
Для массивов выводятся значения индексов и значения элементов.
Для объектов выводятся имена и значения всех свойств.
Строка в конце вывода не переводится.
б) Функция var_dump.
Выдает структурированную информацию о переменной (выражении), включающую ее тип и значение.
Если элементы массива имеют сложное устройство, то функция обрабатывает их рекурсивно.
Для объектов распечатываются только открытые (общедоступные) свойства.
Строка в конце вывода не переводится.
Управлением внутренним указателем
Для управления внутренним указателем массива предназначены следующие функции:
reset — установка указателя в начальную позицию,
end — установка указателя в последнюю позицию,
prev — установка указателя в предыдущую позицию,
next — установка указателя в следующую позицию,
current — получить номер текущей позиции.
Примеры
$arr = array('первый', 'второй', 'третий', 'четвертый');
$elem = current ($arr);
echo $elem; //' первый '
next ($arr);
$elem = next ($arr);
echo $elem; //' третий '
$elem = current ($arr);
echo $elem; //' третий '
$elem = each ($arr);
print_r($elem); //Array([1]=> третий [value]=>третий [0]=>2 [key]=>2)
$elem = current ($arr);
echo $elem; //после вызова итератора — ' четвертый '
$elem = prev ($arr);
echo $elem; // ' третий '
$elem = end ($arr);
echo $elem; // ' четвертый '
$elem = reset ($arr);
echo $elem; // ' первый '
Вопросы для самоконтроля
1. Какие существуют варианты создания массивов с помощью конструктора?
2. В чем состоит назначение оператора foreach? Чем различаются варианты синтаксиса оператора foreach?
3. Можно ли создавать ассоциативные массивы, не используя конструктор?
4. Можно ли создавать массивы с числовыми индексами, не используя конструктор?
5. Какими способами создаются многомерные массивы?
6. Для чего нужен внутренний указатель массива и как им можно управлять?
7. Для чего используется итератор each и в чем особенность возвращаемого им значения?
8. Влияет ли вызов итератора each на положение внутреннего указателя массива?
9. Для чего предназначена конструкция list и каковы особенности её выполнения? Использует ли list в своей работе внутренний указатель массива?
10. Какие библиотечные функции позволяют получить ключи и значения элементов массива?
11. Какие операторы можно применять для вывода информации о структуре объектов данных?