![]() |
![]() |
| http://kurepin.ru/php/array3/ |
|
Разобравшись со стандартными массивами, перейдем к ознакомлению с особенностями массивов ассоциативных. Как вы уже знаете, ассоциативный массив отличается от массива с числовой индексацией только тем, что в качестве индекса используются цепочки символов и букв. В любом их сочетании. И первый вывод, который сам напрашивается -- любая операция, проводимая над ассоциативным массивом, может быть с таким же успехом проведена над массивом с числовой индексацией. Но не всегда работает обратно правило, поэтому пройдемся по функциям, полезным для работы с ассоциативными массивами. Если в обыкновенных массивах мы чаще всего работаем с данными, используя ключи индексации только в качестве идентификатора ячейки, то в ассоциативных массивах имена ячеек и их содержимое достаточно часто используются наравне -- как хранилище данных. Для простоты даже можно представить себе, что ассоциативный массив -- это обыкновенный двумерный массив, где в одном измерении содержится ключ ассоциативного массива, а в другом -- данные. Надеюсь, у вас уже нет проблем с пониманием, что такое ассоциативный массив? Тогда перейдем к делу. Как проверить существование ключа в ассоциативном массиве? Очень просто. Так же, как и любую переменную. if(isset($arr['test']) echo "Ячейка с именем 'test' -- существует"; Но эта функция только сообщит нам: выделено ли место в памяти под ячейку с таким именем или нет. И ответ будет положительным даже если ячейка будет содержать 0 или NULL. Если же вы хостите знать, не пуста ли ячейка, воспользуйтесь функцией . Как удалить ячейку в ассоциативном массиве? Если вы желаете обнулить ячейку, можете присвоить ей ноль или пустую строку: $arr['test']=''; $arr['test']=0; Если же вы задумали удалить ячейку вообще, т.е. удалить ее из памяти, можно воспользоваться функцией деструкции переменной : unset(arr['test']); Как выяснить, содержится ли в массиве какое-то конкретное значение? Для того, чтобы получить ответ на этот вопрос, разработчики PHP включили стандартную функцию : if(in_array('искомое значение',$arr)) :; Функция in_array попросту производит поиск в массиве и возвращает TRUE, если значение найдено или FALSE в противном случае. Однако, есть интересная и важная тонкость в таком поиске. Система автоматического приведения типов в PHP может сыграть с вами злую шутку. Что, если вы ищите число 12345 в массиве, где есть строка "012345"? PHP решит, что это значение вам вполне подходит, так как можно спокойно отбросить незначащий ноль в числе 012345. Чтобы подобного избежать, в четвертой версии PHP в функцию in_array добавлен третий параметр, определяющий: стоит ли производить поиск с учетом разных типов или нет. Можете сами произвести интересные эксперименты, подставляя в массив разные типы и выискивая их. Список типов в PHP можно лицезреть . Как уже было отмечено, хоть идеологическая разница между ключом и значением очевидна, технически они ничем друг от друга не отличаются. Например, у вас есть массив, где названия должностей -- ключи ячеек, а фамилии сотрудников -- их содержимое. По должности вы всегда можете найти фамилию ответственного: $man=$arr['director']; // выясняется, что это Иванов Но с такой же легкостью вам может понадобиться узнать название должности по фамилии сотрудника. И эту задачу можно свести к предыдущей, если... Как можно обернуть ассоциативный массив? Чтобы поменять ключи и значения местами, можно воспользоваться функцией PHP . Думаю, тут и пояснять нечего. Как сортировать ассоциативные массивы? Как и для обыкновенных массивов, для сортировки ассоциативных существуют всевозможные сортировки: asort(), arsort(), ksort(), krsort(), uasort() и uksort(), сортирующие соответственно: прямо, в обратном порядке, прямо по ключам, обратно по ключам, прямо по пользовательской функции и обратно по пользовательской функции. Как соединить два ассоциативных массива? Можно: 1. Воспользоваться функцией . 2. Сложить массивы обычным плюсом. Вы уже знаете как. Однако, надо соблюдать осторожность. Если при слиянии, в массивах окажутся ячейки с одинаковым индексом, ячейка будет перезаписана данными того массива, который указан последним в списке аргументов к array_merge. В принципе, можно этого избежать, если воспользоваться функцией , которая объединяет значения одинаковых ячеек. Производит их "слияние". Все, пожалуй, теперь я могу быть уверенным в том, что проблем с массивами в PHP у вас не возникнет. А если проблемы все же возникнут, вы знаете, куда обращаться... До завтра! P.S. Данный выпуск был подготовлен при подглядывании в книгу Хьюгса Стерлинга "". |