我正在处理一个导入脚本,需要评估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);
因为有人建议其他人,不能再找到链接,但是返回了一个空数组。
我是所有这一切的新手,所以在这里可能完全错了。
有人能告诉我如何做到这一点,或者我能在哪里找到问题的答案?我可能还没有找到它,我的大脑现在已经很累了......
答案 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 );