7

假设我有以下数组:

$arr = array(
   "number2"=>"valid",
   "number13"=>"valid"
);

我需要查找是否存在与number*.

因为$arr,这将是真的。对于以下数组:

$arr2 = array(
   "key"=>"foo",
   "key2"=>"foo2"
);

这将返回错误。

4

4 回答 4

5

这个假设数字需要后跟一个实际数字(编辑:或根本没有),根据需要调整正则表达式。例如,任何以“数字”开头的内容,您都可以使用/^number/.

if(count(preg_grep('/^number[\d]*/', array_keys($arr))) > 0)
{
   return true;
}
else
{
   return false;
}
于 2013-06-19T19:34:05.747 回答
2

使用正则表达式。

foreach ($arr as $key => $value) {
  // NOTE: check for the right format of the regular expression 
  if (preg_match("/^number([0-9]*)$", $key)) {
    echo "A match was found.";
  } else {
    echo "A match was not found.";
  }
}
于 2013-06-19T19:24:28.850 回答
0

这是一个简单的功能,可以满足您的需求:

function preg_grep_key($pattern, $input) {
    return preg_grep($pattern, array_keys($input));
}

// ----- Usage -----

$arr = array(
   "number2"=>"valid",
   "number13"=>"valid"
);


if (count(preg_grep_key('/^number/', $arr)) === 0) {
    // Nope
} else {
    // Yep
}
于 2013-06-19T19:41:04.517 回答
0

EPB 和 Dan Horrigan 做对了,但从代码清洁度的角度来看,让我把这些留在这里:

如果纯粹想返回真假,则不需要if语句;只需返回对结果的empty()检查结果preg_grep()

return !empty(preg_grep('/^number[\d]*/', array_keys($arr));

如果您需要运行“if”检查,count()或者!empty()已经返回真/假,则无需仔细检查它们的值:

if ( count( preg_grep('/^number[\d]*/', array_keys( $arr )) ) ) {
   // Action when it is true
} else {
   // Action when it is false
}

我个人更喜欢empty()计算结果数组元素,因为类型一致性:

if ( !empty( preg_grep('/^number[\d]*/', array_keys( $arr )) ) ) {
   // Action when it is true
} else {
   // Action when it is false
}

更多关于真/假,即当一个语句评估为真/假时:https ://www.php.net/manual/en/language.types.boolean.php

于 2020-12-21T07:01:53.437 回答