【问题标题】:Find out if string matches array key, return value for that key找出字符串是否匹配数组键,返回该键的值
【发布时间】:2015-02-05 16:58:48
【问题描述】:

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

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

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

我在 Stackoverflow 上阅读了它,并找到了很多示例来查看数组中的值是否等于 1,例如: 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);

按照其他人的建议,无法再找到链接,但返回的是一个空数组。

我对这一切都不熟悉,所以这里可能完全错了。

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

【问题讨论】:

  • echo (isset($committees[$category]))?$committees[$category]:'There is no '.$category.' category';
  • 似乎有效!如果你做对了,事情就会变得如此简单!非常感谢...

标签: php arrays regex preg-match


【解决方案1】:

我觉得我有权将其发布为已接受的答案:-) :

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

【讨论】:

    【解决方案2】:

    你可以这样做:

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

    希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • $found[] = $number; 将获得所有匹配项
      【解决方案4】:

      您不显示类别匹配项中的内容会使其变得困难。

      也许是这样的。

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

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 2017-03-22
        • 1970-01-01
        相关资源
        最近更新 更多