有一个数组:
$array1 = array(51=>1.1, 45=>68, 57=>43, 62=>35, 74=>24);
我想验证从变量中获取的值是否以数组中的任何键开头。(变量正确通过,我检查了一下)
foreach (array_keys($array1) as $key1) {
if(preg_match("/^[$rvalue]/", $key1))
{
$positive1=true;
$fvalue1=$array1[$key1];
}
else{
$positive1=false;
}
}
问题是,它运行所有数组,并且总是给我最后一个键的值,而不是与变量匹配的值。我是regex的新手,所以可能是这样,不知道。感谢您的帮助。
对于一个简单的任务来说似乎有点复杂。直接比较怎么样:
foreach ($array1 as $key1 => $value) {
if (substr($rvalue, 0, strlen($key1)) == $key1)
{
$fvalue1 = $value;
break;
}
}
当你找到匹配的时候就打破常规。
去掉正则表达式中的方括号。此外,您正在向后进行检查——您希望将键放入regexp中,并将其与字符串进行匹配:
if (preg_match("/^$key1/, $rvalue))
正则表达式中的方括号用于匹配单个字符,该字符是方括号中的任何一个字符。所以[51]
匹配5
或1
,但它不匹配整个字符串51
。
您也可以将所有键组合到一个正则表达式中,在正则表达式中使用|
来指定替代项:
$alternatives = implode('|', array_keys($array1));
if (preg_match("/^(?:$alternatives)/", $rvalue, $match)) {
$positive1 = true;
$fvalue1 = $array1[$match[0]];
} else {
$positive1 = false;
}