Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用regex搜索数组中的键并返回值-PHP_Php_Arrays_Regex - Fatal编程技术网

使用regex搜索数组中的键并返回值-PHP

使用regex搜索数组中的键并返回值-PHP,php,arrays,regex,Php,Arrays,Regex,假设有一个数组 $data = array( "key1" => "value1", "key2" => "value2", "key3" => "value3" ); 还有一个字符串可能包含这个数组中的一个键。我想要数组中这个键的值 例如,字符串是“**^%$key1^&*”,其中包含“key1”。我要做的是返回值1 这个例子可能更便于理解: $fruits = array( "apple" => "red", "avocad

假设有一个数组

$data = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => "value3"
);
还有一个字符串可能包含这个数组中的一个键。我想要数组中这个键的值

例如,字符串是
“**^%$key1^&*”
,其中包含
“key1”
。我要做的是返回
值1


这个例子可能更便于理解:

$fruits = array(
    "apple" => "red",
    "avocado" => "green",
    "orange" => "orange"
);
当输入为“Gala apple”时,我希望输出为“红色”

我现在能想到的是使用foreach

$str = "Gala apple";

foreach($fruits as $k=>$v) {
    if(preg_match('/'.$k.'/i', $str))
        return $v;
}
这个代码有效

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

为什么不直接使用


如果密钥字符串中唯一的字母数字字符是有效的密钥,则可以使用函数(如
$result=preg_replace(“/[^a-zA-Z0-9]+/”,“,$s”)来剥离其他字符来自SO post

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

示例代码:

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


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

这只是一般的想法:)使用strop而不是regexp@nerdlyist是,“可能包含”表示如果字符串中显示的键,因此*^%$key13^&包含key1是否使用regexp或strposAre字母数字字符,这是您希望保留在字符串中的唯一字符@chris85这是一个糟糕的例子,我已经更新了这个问题,我只希望字符串与数组中的键匹配。
$array = array(
    "key1" => "val1",
    "key2" => "val2",
    "key3" => "val3",
    "key4" => "val4",
    );
echo $array["key2"];