我正在尝试验证数组具有2个特定值,例如:
['foo', 'bar']
我觉得我最接近答案的是这样的:
Yup.array()
.of(Yup.mixed().oneOf(['foo', 'bar']))
.min(2)
.max(2)
但这也会通过['foo', 'foo']
和['bar', 'bar']
答案 0 :(得分:0)
作为变体,您可以使用Yup test
函数,该函数允许您使用当前字段值和另一个表单字段值进行操作。在此示例中,我们检查字段值是否具有['foo', 'foo']
之类的重复项,然后检查是否没有重复项或字段数组的每个值都包含foo
或bar
:
Yup.array()
.test('contains', 'Error message here', function (value) {
let hasDuplicate = value.some((val, i) => value.indexOf(val) !== i);
return !hasDuplicate && value.every(el => ['foo', 'bar'].includes(el));
})
.min(2)
.max(2)
在这里您可以找到有关test
函数的更多信息:https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema
答案 1 :(得分:0)
您也可以为此编写一个函数。 我了解的是您正在数组中寻找2个变量。 这是我尝试过的
<?php
$data = [
[
"groupTaskUuid" => "98790287437987860",
"purchaseOrderGroupTasks" => "98790287437987893"
],
[
"groupTaskUuid" => "98790287437987862",
"purchaseOrderGroupTasks" => "98790287437987894"
],
[
"groupTaskUuid" => "98790287437987861",
"purchaseOrderGroupTasks" => "98790287437987895"
]
];
$GroupTaskUuid = [
"98790287437987862",
"98790287437987861"
];
$GroupTaskUuidFlipped = array_flip($GroupTaskUuid); // make UUID values as keys
$purchaseOrderGroupTasks = [];
foreach($data as $value){
if(isset($GroupTaskUuidFlipped[$value['groupTaskUuid']])){
$purchaseOrderGroupTasks[] = $value['purchaseOrderGroupTasks'];
}
}
print_r($purchaseOrderGroupTasks);
如果您正在寻找长度完全相同的数组,那么您也可以在功能上进行长度检查。 该功能看起来像
function find(arr,first,second){
let temp=false;
if(arr.includes(first)&&arr.includes(second)){
temp=true;
}
return temp;
}
find(["foo","bar"],"foo","bar");