Использование регулярных выражений для поиска ключа в массиве и возврата значения

Предположим, что есть массив

$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

Решение

Почему бы просто не использовать StrPos ?

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

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

Другие решения

Если единственными буквенно-цифровыми символами в строке ключа являются действительные ключи, вы можете удалить другие символы с помощью такой функции, как $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) метод.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector