Проверка совпадения структуры массивов в PHP

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

К счастью в PHP есть способ разрешить это вопрос.

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

Ключи в возвращаемом массиве находятся в том же порядке, что и в исходном. Поэтому если два массива имеют одинаковую структуру массивы, которые возвратит для них функция array_keys, будут идентичны.

Рассмотрим два массива:

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

Таким образом, можно без труда проверить структуру массивов на совпадение.

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

Однако в обоих случаях есть два нюанса.

1.Проверка только верхнего уровня вложенности

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

Усложним наш пример.

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

Если же ввести дополнительную проверку для вложенного массива, всё сразу встанет на свои места.

Данное обстоятельство необходимо обязательно учитывать при работе с массивами сложной структуры.

2.Игнорирование типа данных элемента массива

Рассматриваемый способ проверки не учитывает тип данных элемента массива. Что создаёт немало трудностей. Особенно с учётом того, что PHP язык с динамической типизацией.

Поэтому крайне желательно помимо ключей проверять ещё и тип данных элементов, которым они соответствуют.

Например:

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

Зная об обеих вышеописанных особенностях работы с функцией array_keys, можно построить схему проверки структуры любого массива.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *