use*_*841 14 php arrays validation
是否有一个函数来确保任何给定的数组符合特定的结构?我的意思是具有特定的键名,可能是值的特定类型,以及任何嵌套结构.
现在我有一个地方,我想确保过去的数组有某些键,一对持有某种数据类型,一个子数组有特定的键名.我已经完成了很多乱跑,因为我将错误的数组传递给它,最后我就到了我有一堆
if ( ! isset($arr['key1']) ) { .... }
if ( ! isset($arr['key2']) ) { .... }
if ( ! isset($arr['key3']) ) { .... }
Run Code Online (Sandbox Code Playgroud)
如果我能事先检查一下阵列是否符合特定结构,我本可以节省大量时间和惊愕.理想情况下
$arrModel = array(
'key1' => NULL ,
'key2' => int ,
'key3' => array(
'key1' => NULL ,
'key2' => NULL ,
),
);
if ( ! validate_array( $arrModel, $arrCandidate ) ) { ... }
Run Code Online (Sandbox Code Playgroud)
所以,我问的问题是,这已经存在,还是我自己写的?
您可以使用Symfony 验证组件
安装:
composer require symfony/validator doctrine/annotations
Run Code Online (Sandbox Code Playgroud)
用法:
$myArray = [
'name' => ['first_name' => 'foo', 'last_name' => 'bar'],
'email' => 'foo@email.com'
];
$constraints = new Assert\Collection([
'name' => new Assert\Collection([
'first_name' => new Assert\Length(['min' => 101]),
'last_name' => new Assert\Length(['min' => 1]),
]),
'email' => new Assert\Email(),
]);
$validator = Validation::createValidator();
$violations = $validator->validate($myArray, $constraints);
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅如何验证原始值(标量值和数组)
它不存在于内置.
也许尝试像(未经测试):
array_diff(array_merge_recursive($arrCandidate, $arrModel), $arrModel)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9707 次 |
| 最近记录: |