Открыть меню    

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 документацией.

Комментарии к статье

аватарка пользователя
2012-11-21
Александр

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

аватарка пользователя
2013-05-04
Жаслан

Полезная статья. Сжато и информативно

аватарка пользователя
2013-09-05
Андрей

Александр, там и написано "Обратите внимание, на выходе мы получаем не ассоциативный массив, а числовой массив."
Если ты такой умный, чё тогда сюда забрел?

аватарка пользователя
2013-10-25
Николай

Есть ассоциативный массив, и в нём ключи имеют в имени дефис,
например: text-5267d3503ab96
Если пишу:
$row->text-5267d3503ab96 то скрипт выдает ошибку.
Как быть?

аватарка пользователя
2017-10-07
Вася

Николай это твое $row-> работает только для объектов, а массив это уже другое например $row[0]. Путаешь круглое с красным!