Предположим, что есть массив
$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;
}
Этот код работает.
Но … есть ли способ избежать цикла?
Почему бы просто не использовать StrPos ?
$data = array(
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
);
$str = "!&!%key3!@#$$";
for($data as $key=>$value) {
if (strpos($str, $key) !== false) {
return $value;
}
}
Если единственными буквенно-цифровыми символами в строке ключа являются действительные ключи, вы можете удалить другие символы с помощью такой функции, как $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)
метод.