查明字符串是否与数组键匹配,该键的 return 值

Find out if string matches array key, return value for that key

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

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

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

我在 Whosebug 上阅读了相关内容,并找到了很多示例来查看数组中的值是否等于 1,例如: preg_match array items in string? 并试图跟随他们。 我试过了

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

但这只 return找到了多少匹配项?

我也试过了

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

正如其他人建议的那样,找不到 link,但是 return 编辑了一个空数组。

我对所有这些都是新手,所以这里可能完全错了。

谁能告诉我该怎么做,或者在哪里可以找到问题的答案?我可能只是没有找到它,我现在的大脑很累...

你可以这样做:

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

希望这对您有所帮助:)

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

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

你不显示类别匹配中的内容,这让事情变得很困难。

也许是这样的。

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

我觉得我有权 post 作为答案被接受:-) :

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