好的,我有一个非常定制的问题,所以忍受着我。PHP比较阵列值进行验证
我基本上有两组数据,我想与许多不同的可能性进行比较。
$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
键/值对匹配,$data
“SK/v有效 - 如果
$data
键/值对匹配$blueprint
键和来自嵌套数组的值,则$data
'sk/v有效 - 如果
$data
阵列省略存在于$blueprint
一个键/值对,$data
“SK/v的可能仍然是有效的,如果它不位于$required
阵列中 - 如果
$data
阵列提供一个密钥/值对其中做在$blueprint
不存在的,$data
“SK/v是无效 - 如果从一个键/值对的
$data
键匹配的$blueprint
值没有定义键,$data
” SK/v仍然可以是有效的。但是,如果$blueprint
同时具有定义的键和值,则$data
的k/v必须满足规则1的要求才有效。 - 我想强加给几个
$blueprint
K/v,其中,如果$data
的字符限制“SK/V超过该字符数限制,$data
SK/V无效
如果$data
” sk/v是无效的,然后我想以某种方式将错误与特定的k/v关联起来,描述为什么它是无效的(超过字符限制,一般错误等)。也许错误会在第三个数组中定义?
我查看了array_intersect_assoc
,但不确定这是否超出了该功能的范围。此外,$blueprint
中会有大量的值,所以我需要尽可能多样的东西。
我认为这是正确的,当我写这篇文章的时候,我的大脑融化了,所以请不要犹豫,如果感到困惑,请不要犹豫。我最好单独验证每个k/v吗?
让我们看看谁是那里的聪明人。
你可以添加各种阵列为我们一起玩的;) – 2010-12-02 02:12:50
肯定,给我几分钟到这... – 2010-12-02 03:37:23