假设有一个数组
$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;
}
此代码有效。
但是......有什么方法可以避免循环吗?
答案 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)
方法。