找出string是否匹配数组键,返回该键的值

时间:2015-02-05 16:58:48

标签: php arrays regex preg-match

我正在处理一个导入脚本,需要评估set字符串是否适合后端字段可能具有的值。 更确切地说,我有这个提交数组:

$committees = array(
    'Ämter'         => 1,
    'Abteilungen'   => 2,
    'Konservatoren'     => 3,
    'Dienstagssitzung'  => 4,
);

现在我需要弄清楚是否保存了一个字符串 变量$category匹配该数组中的任何键。如果它与其中一个条目匹配,我需要它返回与该键一起使用的值(1,2,3或4)。

我在Stackoverflow上阅读了它,并找到了大量的例子来查看一个值是否等于数组中的值,例如: preg_match array items in string? 并试图跟随这些。 我试过了

$committeesKeys = '/(' . implode('|', array_keys($committees)) . ')/';
$matches = preg_match($committeesKeys, $category);

但是只返回了它找到了多少匹配?

我也试过

$input = preg_quote($category, '/');
$matches = preg_filter('/'.$input.'/', null, $committees);

因为有人建议其他人,不能再找到链接,但是返回了一个空数组。

我是所有这一切的新手,所以在这里可能完全错了。

有人能告诉我如何做到这一点,或者我能在哪里找到问题的答案?我可能还没有找到它,我的大脑现在已经很累了......

4 个答案:

答案 0 :(得分:2)

我觉得我有权发布接受答案:-):

echo (isset($committees[$category]))?$committees[$category]:'There is no '.$category.' category';

答案 1 :(得分:1)

你可以这样做:

function getValue($category){
    if (array_key_exists($category, $committees)){
       return $committees[$category]; //the value you want
    }
}

希望这会有所帮助:)

答案 2 :(得分:0)

preg_match()有一个第三个参数,允许您将捕获组保存到数值数组中。但是,如果你想直接比较一个字符串,你可以简单地使用一个循环和strcmp或===,这可能会更快,因为preg_match必须编译你在第一个参数中定义的正则表达式。我对这个问题的解决方案如下:

$found = FALSE;
foreach ( $committees as $name=>$number ) {
    if ( $name === $category ) {
        $found = $number;
    }
}
return $found;

答案 3 :(得分:0)

通过不显示类别匹配中的内容使您变得困难。

也许是这样的。

$results = array_intersect ($matches,$committees );