使用正则表达式搜索数组中的键并返回值 - PHP

时间:2017-01-20 14:56:02

标签: php arrays regex

假设有一个数组

$data = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3"
);

并且有一个字符串可能包含此数组中的一个键。我想在数组中使用此键的值。

例如,字符串为"**^%$key1^&*",其中包含"key1"。我想要做的是返回value1

这个例子可能更适合理解:

$fruits = array(
    "apple" => "red",
    "avocado" => "green",
    "orange" => "orange"
);

当输入为"Gala apple"时,我希望输出为"red"

我现在能想到的是使用foreach。

$str = "Gala apple";

foreach($fruits as $k=>$v) {
    if(preg_match('/'.$k.'/i', $str))
        return $v;
}

此代码有效。

但是......有什么方法可以避免循环吗?

2 个答案:

答案 0 :(得分:0)

为什么不使用strpos

$data = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3",
);

$str = "!&!%key3!@#$$";
for($data as $key=>$value) {
    if (strpos($str, $key) !== false) {
        return $value;
    }
}

答案 1 :(得分:0)

如果密钥字符串中唯一的字母数字字符是有效密钥,则可以使用this SO Package Manager Console Host Version 2.12.0.817 中的$result = preg_replace("/[^a-zA-Z0-9]+/", "", $s);等函数去除其他字符。

如果您知道密钥,则可以使用以下语法直接访问该值:
 $array[$key]

示例代码:

$array = array(
    "key1" => "val1",
    "key2" => "val2",
    "key3" => "val3",
    "key4" => "val4",
    );
echo $array["key2"];

这将回显val2

要验证密钥是否存在,您可以使用isset($array[$key])array_key_exists($key, $array)方法。