说我有以下数组:
$arr = array(
"number2"=>"valid",
"number13"=>"valid"
);
我需要查找number*
是否存在密钥。
对于$arr
,这是真的。对于以下数组:
$arr2 = array(
"key"=>"foo",
"key2"=>"foo2"
);
这会返回false。
答案 0 :(得分:5)
这个假设数字需要跟一个实际数字(编辑:或根本没有),根据需要调整正则表达式。例如,以“数字”开头的任何内容都可以使用/^number/
。
if(count(preg_grep('/^number[\d]*/', array_keys($arr))) > 0)
{
return true;
}
else
{
return false;
}
答案 1 :(得分: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.";
}
}
答案 2 :(得分: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
}
答案 3 :(得分:0)
EPB 和 Dan Horrigan 做对了,但从代码清洁的角度来看,让我把这些留在这里:
如果你纯粹想返回真或假,你不需要if语句;只需返回对 empty()
的结果进行 preg_grep()
检查的结果:
return !empty(preg_grep('/^number[\d]*/', array_keys($arr));
如果您需要运行“if”检查,count()
或 !empty()
将返回 true/falsy,您无需再次检查它们的值:
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