Ответ 1
Он не существует.
Возможно, попробуйте что-то вроде (untested):
array_diff(array_merge_recursive($arrCandidate, $arrModel), $arrModel)
Есть ли функция, чтобы убедиться, что любой данный массив соответствует определенной структуре? Я имею в виду, что это имеет определенные ключевые имена, возможно, конкретные типы для значений и любую вложенную структуру.
В настоящее время у меня есть место, где я хочу убедиться, что массив, который проходит мимо, имеет определенные ключи, пару с определенным типом данных и один под-массив с определенными именами ключей. Я сделал много пробега, потому что я передавал ему неправильные массивы, и, наконец, я нахожусь в точке, где у меня есть куча
if ( ! isset($arr['key1']) ) { .... }
if ( ! isset($arr['key2']) ) { .... }
if ( ! isset($arr['key3']) ) { .... }
Я бы сэкономил много времени и ужаса, если бы мог проверить, что массив соответствует определенной структуре заранее. В идеале что-то вроде
$arrModel = array(
'key1' => NULL ,
'key2' => int ,
'key3' => array(
'key1' => NULL ,
'key2' => NULL ,
),
);
if ( ! validate_array( $arrModel, $arrCandidate ) ) { ... }
Итак, вопрос, который я задаю, это уже существует, или я сам пишу это?
Он не существует.
Возможно, попробуйте что-то вроде (untested):
array_diff(array_merge_recursive($arrCandidate, $arrModel), $arrModel)
Преобразование массива в JSON:
http://us.php.net/manual/en/function.json-encode.php
Затем проверьте схему JSON:
Я знаю, что это своего рода старый пост, извините, если мой ответ не подходит.
Я в процессе написания php-пакета, который делает именно то, что вы просите, называется Structure.
Что вы можете сделать с пакетом, это что-то вроде:
$arrayCheck = new \Structure\ArrayS();
$arrayCheck->setFormat(array("profile"=>"array"));
if ($arrayCheck->check($myArray)) {
//...
}
Вы можете проверить это здесь: http://github.com/3nr1c/structure
Я наткнулся на инструмент под названием Matchmaker на GitHub, который выглядит очень всеобъемлющим и имеет поддержку композитора и модульные тесты:
https://github.com/ptrofimov/matchmaker
Вы можете включить его в свой проект с помощью
composer require ptrofimov/matchmaker
.
Создайте массив, определяющий вашу структуру, а затем перейдите к циклу массива, который вы хотите проверить, и сравните его с определенной структурой массива.
принятый ответ make diff основан на значениях, так как он касается структуры массива, которую вы не хотите использовать для значений diff. Вы должны использовать array_diff_key()
Функция сама по себе не рекурсивна. Он не будет работать из поля массива выборок из вопроса.