А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/array3/
Rambler's Top100
Пишем на PHP: Работа с массивами (окончание)

Разобравшись со стандартными массивами, перейдем к ознакомлению с особенностями массивов ассоциативных.

Как вы уже знаете, ассоциативный массив отличается от массива с числовой индексацией только тем, что в качестве индекса используются цепочки символов и букв. В любом их сочетании. И первый вывод, который сам напрашивается -- любая операция, проводимая над ассоциативным массивом, может быть с таким же успехом проведена над массивом с числовой индексацией.

Но не всегда работает обратно правило, поэтому пройдемся по функциям, полезным для работы с ассоциативными массивами.

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

Надеюсь, у вас уже нет проблем с пониманием, что такое ассоциативный массив?

Тогда перейдем к делу.

Как проверить существование ключа в ассоциативном массиве?

Очень просто. Так же, как и любую переменную.

if(isset($arr['test']) echo "Ячейка с именем 'test' -- существует";

Но эта функция только сообщит нам: выделено ли место в памяти под ячейку с таким именем или нет. И ответ будет положительным даже если ячейка будет содержать 0 или NULL.

Если же вы хостите знать, не пуста ли ячейка, воспользуйтесь функцией empty().


Как удалить ячейку в ассоциативном массиве?

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

$arr['test']='';
$arr['test']=0;

Если же вы задумали удалить ячейку вообще, т.е. удалить ее из памяти, можно воспользоваться функцией деструкции переменной unset():

unset(arr['test']);


Как выяснить, содержится ли в массиве какое-то конкретное значение?

Для того, чтобы получить ответ на этот вопрос, разработчики PHP включили стандартную функцию in_array:

if(in_array('искомое значение',$arr)) :;


Функция in_array попросту производит поиск в массиве и возвращает TRUE, если значение найдено или FALSE в противном случае.

Однако, есть интересная и важная тонкость в таком поиске. Система автоматического приведения типов в PHP может сыграть с вами злую шутку.

Что, если вы ищите число 12345 в массиве, где есть строка "012345"? PHP решит, что это значение вам вполне подходит, так как можно спокойно отбросить незначащий ноль в числе 012345.

Чтобы подобного избежать, в четвертой версии PHP в функцию in_array добавлен третий параметр, определяющий: стоит ли производить поиск с учетом разных типов или нет.

Можете сами произвести интересные эксперименты, подставляя в массив разные типы и выискивая их. Список типов в PHP можно лицезреть здесь.

Как уже было отмечено, хоть идеологическая разница между ключом и значением очевидна, технически они ничем друг от друга не отличаются.

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

$man=$arr['director']; // выясняется, что это Иванов

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


Как можно обернуть ассоциативный массив?

Чтобы поменять ключи и значения местами, можно воспользоваться функцией PHP array_flip.

Думаю, тут и пояснять нечего.

Как сортировать ассоциативные массивы?

Как и для обыкновенных массивов, для сортировки ассоциативных существуют всевозможные сортировки: asort(), arsort(), ksort(), krsort(), uasort() и uksort(), сортирующие соответственно: прямо, в обратном порядке, прямо по ключам, обратно по ключам, прямо по пользовательской функции и обратно по пользовательской функции.

Как соединить два ассоциативных массива?

Можно:

1. Воспользоваться функцией array_merge.

2. Сложить массивы обычным плюсом. Вы уже знаете как.

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

В принципе, можно этого избежать, если воспользоваться функцией array_merge_recursive(), которая объединяет значения одинаковых ячеек. Производит их "слияние".

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

До завтра!

P.S. Данный выпуск был подготовлен при подглядывании в книгу Хьюгса Стерлинга "PHP 4.0. Руководство разработчика".

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin