比较变量start和数组键

时间:2015-02-20 00:21:39

标签: php arrays regex

有这个数组:

$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;
        }
}

问题是它运行所有数组并始终给我最后一个键的值,而不是匹配变量的值。 我是正则表达式的新手,所以可能是这样,不知道。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

摆脱正则表达式中的方括号。此外,您正在向后检查 - 您希望将密钥放入正则表达式,并将其与字符串匹配:

if (preg_match("/^$key1/, $rvalue))

正则表达式中的方括号用于匹配括号中任何一个字符的单个字符。因此[51]匹配51,但它与整个字符串51不匹配。

您还可以将所有键组合到一个正则表达式中,使用正则表达式中的|来指定备选方案:

$alternatives = implode('|', array_keys($array1));
if (preg_match("/^(?:$alternatives)/", $rvalue, $match)) {
    $positive1 = true;
    $fvalue1 = $array1[$match[0]];
} else {
    $positive1 = false;
}

答案 1 :(得分:0)

对于简单的任务来说似乎很复杂。如何直接比较:

foreach ($array1 as $key1 => $value) {
    if (substr($rvalue, 0, strlen($key1)) == $key1)
    {
        $fvalue1 = $value;
        break;
    }
}

找到匹配项时,只需从循环中断开。