好的,我有一個非常定製的問題,所以忍受着我。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