我有两个要比较的数组,我想知道是否有更有效的方法来做到这一点。
第一个数组是用户提交的值,第二个数组是允许的值,其中一些可能包含通配符来代替数字,例如
// user submitted values
$values = array('fruit' => array(
'apple8756apple333',
'banana234banana',
'apple4apple333',
'kiwi435kiwi'
));
//allowed values
$match = array('allowed' => array(
'apple*apple333',
'banana234banana',
'kiwi*kiwi'
));
我需要知道第一个数组中的所有值是否与第二个数组中的值匹配。
这就是我正在使用的:
// the number of values to validate
$valueCount = count($values['fruit']);
// the number of allowed to compare against
$matchCount = count($match['allowed']);
// the number of values passed validation
$passed = 0;
// update allowed wildcards to regular expression for preg_match
foreach($match['allowed'] as &$allowed)
{
$allowed = str_replace(array('*'), array('([0-9]+)'), $allowed);
}
// for each value match against allowed values
foreach($values['fruit'] as $fruit)
{
$i = 0;
$status = false;
while($i < $matchCount && $status == false)
{
$result = preg_match('/' . $match['allowed'][$i] . '/', $fruit);
if ($result)
{
$status = true;
$passed++;
}
$i++;
}
}
// check all passed validation
if($passed === $valueCount)
{
echo 'hurray!';
}
else
{
echo 'fail';
}
我觉得我可能会错过一个比 foreach 循环中的 while 循环做得更好的 PHP 函数。还是我错了?
更新:对不起,我忘了提,数字可能出现在值中超过 1 个位置,但只有 1 个通配符。我已经更新了数组来表示这一点。