10 PHP подсказок по управлению ассоциативными массивами
Ассоциативный массив – незаменимый тип данных, используемый для описания совокупности уникальных ключей и ассоциативных значений, – является базовым элементом всех языков программирования, включая PHP. По существу, ассоциативные массивы играют такую важную роль в веб-программировании, что в PHP включена поддержка множества функций и свойств, способных управлять массивами данных всеми мыслимыми способами. Такая обширная поддержка может оказаться чересчур громоздкой для разработчиков, ищущих наиболее эффективные способы управления массивами в своих приложениях. В этой статье я приведу 10 подсказок, которые помогут вам резать, кромсать и шинковать ваши данные бесконечным числом способов.
1. Добавление элементов массива.
PHP – слабо типизированный язык, т. е. в нем не надо детально описывать ни массив, ни его размер. Вместо этого массив можно одновременно объявить и наполнить:
PHP
$capitals = array(
'Alabama' => 'Montgomery',
'Alaska' => 'Juneau',
'Arizona' => 'Phoenix'
);
Дополнительные элементы массива могут присоединяться следующим способом:
PHP
$capitals['Arkansas'] = 'Little Rock';
Если вы работаете с массивами, пронумерованными числами, и предпочли бы присоединять элементы (в начало массива) и прикреплять элементы, используя детально-названную функцию, рассмотрите array_push()
и array_unshift()
функции (эти функции не работают с ассоциативными массивами).
2. Удаление элементов массива
Чтобы удалить элемент из массива, воспользуйтесь unset() функцией:
unset($capitals['California']);
Работая с массивами, пронумерованными числами, вы получаете больше свободы в том, что касается удаления элементов массива. Т. е. вы можете воспользоваться функциями array_shitt()
и array_pop()
, чтобы удалить элемент с начала и с конца массива соответственно.
3. Меняем местами ключи и значения
Предположим, что вы захотели создать новый массив с именем $states
, столицы штатов в котором будут индексами, а сами штаты – ассоциативными значениями. Данная задача (меняем местами ключи и значения) легко решается с помощью array_flip()
функции:
PHP
$capitals = array(
'Alabama' => 'Montgomery',
'Alaska' => 'Juneau',
'Arizona' => 'Phoenix'
);
$states = array_flip($capitals);
// $states = array(
// 'Montgomery' => string 'Alabama',
// 'Juneau' => string 'Alaska',
// 'Phoenix' => string 'Arizona'
// );
4. Слияние массивов
Предположим, что предыдущий массив использовался в сочетании с основанным на web-технологиях "flash card" (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) сервисом и вы захотели дать возможность студентам проверить их знания не только о мировых столицах, но и столицах соединенных штатов. Можно соединить массив (со столицами штатов) с массивом (с мировыми столицами) использую array_merge()
функцию:
PHP
$stateCapitals = array(
'Alabama' => 'Montgomery',
'Alaska' => 'Juneau',
'Arizona' => 'Phoenix'
);
$countryCapitals = array (
'Australia' => 'Canberra',
'Austria' => 'Vienna',
'Algeria' => 'Algiers'
);
$capitals = array_merge($stateCapitals, $countryCapitals);
5. Редактирование значений массивов
Предположим, что найденные в массиве данные могут содержать ошибки связанные с употреблением заглавных букв, а вы хотите исправить эти ошибки, прежде чем вносить данные в базу данных. В этом случае можно воспользоваться array_map()
функцией, чтобы применить callback-функцию к каждому элементу массива:
PHP
function capitalize($element)
{
$element = strtolower($element);
// Переводим все буквы в нижний регистр
return ucwords($element);
// Преобразуем в верхний регистр первый символ каждого слова в строке
}
$capitals = array(
'Alabama' => 'montGoMEry',
'Alaska' => 'Juneau',
'Arizona' => 'phoeniX'
);
$capitals = array_map("capitalize", $capitals);
6. Сортируем массивы по ключам
Флэшкард приложения (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) прибегают к различным техникам обучения, включая сортировку карточек определенными способами, к примеру, по алфавиту. Можно сортировать ассоциативные массивы по ключам, используя ksort()
функцию:
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
ksort($capitals);
Так как массив передается по ссылке, ksort()
сортирует массив «на место», т. е. вам не понадобится результаты сортировки назначать другой переменной.
7. Рандомизация порядка массива
Перемешать элементы в случайном порядке можно при помощи функции shuffle()
:
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
shuffle($capitals);
foreach ($capitals as $k=>$v)
echo "$k: $v
";
Результат:
0: Juneau 1: Montgomery 2: Phoenix
Обратите внимание, на выходе мы получаем не ассоциативный массив, а числовой массив.
Если вместо рандомизации массива вы хотите наугад выбрать значение, воспользуйтесь array_rand()
функцией.
8. Определяем, существуют ли ключи и значения
Можно воспользоваться in_array()
функцией, чтобы определить, существуют ли элементы массива:
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
if (in_array("Juneau", $capitals))
{
echo "Exists!";
} else {
echo "Does not exist!";
}
Возможность определить: существуют ли ключи массива, менее известна. Реализуется же она с помощью array_key_exists() функции:
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
if (array_key_exists("Alaska", $capitals))
{
echo "Key exists!";
} else {
echo "Key does not exist!";
}
9. Ищем массив
Возможно, вы захотите снабдить флэшкард ресурс поиском, чтобы пользователи легко могли найти штат, которой связан с определенной столицей. Это можно осуществить с помощью функции array_search()
(эта функция ищет в массиве заданное значение и возвращает соответствующий ключ):
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
$state = array_search('Juneau', $capitals);
// $state = 'Alaska'
10. Стандартная PHP библиотека
Стандартная PHP библиотека (SPL) снабжает разработчиков порядочным числом структур данных, интерфейсов, исключений и других свойств, которыми раньше язык PHP похвастаться не мог. Среди этих свойств есть возможность итерации (повторения) массива с помощью объекто-оринетированного синтаксиса.
PHP
$capitals = array(
'Arizona' => 'Phoenix',
'Alaska' => 'Juneau',
'Alabama' => 'Montgomery'
);
$arrayObject = new ArrayObject($capitals);
foreach ($arrayObject as $state => $capital)
{
printf("The capital of %s is %s
", $state, $capital);
}
// The capital of Arizona is Phoenix
// The capital of Alaska is Juneau
// The capital of Alabama is Montgomery
Это только одно из классных свойств, включенных в SPL. Для получения большей информации ознакомьтесь с PHP документацией.
Комментарии к статье
А теперь попробуйте выполнить свой пример №7. Результатом будет уже не ассоциативный массив с таких статей, авторы которых не знают принципов действия даже простейших функций.
Полезная статья. Сжато и информативно
Александр, там и написано "Обратите внимание, на выходе мы получаем не ассоциативный массив, а числовой массив."
Если ты такой умный, чё тогда сюда забрел?
Есть ассоциативный массив, и в нём ключи имеют в имени дефис,
например: text-5267d3503ab96
Если пишу:
$row->text-5267d3503ab96 то скрипт выдает ошибку.
Как быть?
Николай это твое $row-> работает только для объектов, а массив это уже другое например $row[0]. Путаешь круглое с красным!