Хорошо, у меня довольно индивидуальный вопрос, так что терпите меня.
У меня есть два набора данных, которые я хочу сравнить с множеством различных возможностей.
$data = array(
'object'=>'ball', // Should check VALID (Rule 2)
'color'=>'white', // VALID (Rule 2)
'heavy'=>'no', // VALID (Rule 1)
'name'=>'wilson', // VALID (Rule 5)
'funny'=>'no' // INVALID (Rule 4)
);
$data_2 = array(
'object'=>'box', // VALID (Rule 2)
'color'=> 'blue', // VALID (Rule 2)
'texture'=>'hard', // VALID (Rule 1)
'heavy'=>'yes', // INVALID (Rule 4)
'stupid'=>'no' // INVALID (Rule 4)
// Name is INVALID because it is missing (Rule 3)
);
$required = array(
'color'=>array('white','blue'),
'heavy'=> 'no',
'name'
);
$errors = array(
'color'=>array('required'=>'Color is Required','invalid'=>'Color invalid')
'object'=>array('invalid'=>'Object invalid'),
'texture'=>array('invalid'=>'Texture invalid'),
'heavy'=>array('required'=>'Heavy is Required','invalid'=>'Heavy invalid'),
'name'=>array('required'=>'Name is Required','max_char'=>'Name exceeds char limit',
'invalid'=>'Invalid item provided',
);
$blueprint = array(
'object'=>array('box','ball'),
'color'=>array('blue','white'),
'texture'=>'hard',
'heavy'=>'no',
'name'
);
Я хочу запустить $data
через $blueprint
и убедиться в следующем:
- Если пара ключ / значение
$data
соответствует паре ключ / значение $blueprint
, k / v $data
является действительным
- Если пара ключ / значение
$data
совпадает с ключом $blueprint
и значением из вложенного массива, k / v $data
является действительным
- Если в массиве
$data
отсутствует пара ключ / значение, существующая в $blueprint
, k / v $data
может все еще быть действительным, если он не находится в массиве $required
- Если массив
$data
предоставляет пару ключ / значение, которой нет в $blueprint
, k / v $data
недопустимо
- Если ключ
$data
из пары ключ / значение соответствует значению $blueprint
без определенного ключа, k / v $data
все еще может быть действительным. Однако, если в $blueprint
определены ключ и значение, k / v для $data
должно соответствовать требованиям правила 1, чтобы быть действительным.
- Я бы хотел наложить ограничение на количество символов для нескольких
$blueprint
k / v, где, если k / v $data
превышает это ограничение на число символов, $data
s k / v недопустимо
Если $data
'sk / v недопустимо, я бы хотел как-то связать ошибку с этим конкретным k / v, описывающую, почему она недопустима (превышен предел символов, общая ошибка и т. Д.). Возможно, ошибка определиться в третьем массиве?
Я изучил array_intersect_assoc
, но не уверен, выходит ли это за рамки этой функции. Кроме того, в $blueprint
будет много значений, поэтому мне нужно что-то настолько универсальное, насколько это возможно.
Я думаю, что это правильно, мой мозг как будто растаял, когда я писал это, поэтому, пожалуйста, не стесняйтесь спрашивать, если запутался. Мне лучше проверять каждый к / в индивидуально?
Давайте посмотрим, кто там мозговой.