搜索数组键说我有以下数组:通配符
$arr = array(
"number2"=>"valid",
"number13"=>"valid"
);
,我需要找到,如果存在与number*
存在的关键。
对于$arr
,这是对的。对于以下阵列:
$arr2 = array(
"key"=>"foo",
"key2"=>"foo2"
);
这将返回false。
搜索数组键说我有以下数组:通配符
$arr = array(
"number2"=>"valid",
"number13"=>"valid"
);
,我需要找到,如果存在与number*
存在的关键。
对于$arr
,这是对的。对于以下阵列:
$arr2 = array(
"key"=>"foo",
"key2"=>"foo2"
);
这将返回false。
这个假设数字需要跟一个实际的数字(编辑:或者根本没有),根据需要调整正则表达式。例如,任何以“数字”开头的内容,都可以使用/^number/
。
if(count(preg_grep('/^number[\d]*/', array_keys($arr))) > 0)
{
return true;
}
else
{
return false;
}
使用正则表达式。
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.";
}
}
这会起作用,但像@mario建议的那样,'array_keys'上的'preg_grep'更简单,更“程序化”。 PHP有很多很多有用的数组函数来保存输入。 – sgroves
这对我来说非常有用。我有一个电子邮件收件人和电台选项表,其中第1列是发件人(只允许一个),第2列第3列中的人员具有“收件人”,“抄送”和“不适用”的广播选项。值所选内容是在$ _POST中携带的。在下一页,我需要通过$ _POST进行解析,然后查找以“收音机”开头的密钥,以使该人成为发件人,“收件人”收件人,“CC”收件人或根本不发送邮件( “NA”)。 – user208145
下面是一个简单的函数,它会做你想要什么:
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
}
很多的方式来处理它 - 一个普通的老'的foreach()'循环追加到输出数组,或者如果你想要变得聪明,'array_filter()'加'array_flip()'。 –
您可以使用'array_key_exists'来检查特定的数组密钥,但是没有可用的通配符版本。您可以使用循环来检查多个值。 –
或['array_keys()'](http://php.net/array_keys)上的''preg_grep()'](http://php.net/preg_grep)。 – mario