[英]Find a string in array key with regex
你好,
問題1:
我需要這樣的翻譯(近義)函數,
$translated_array = array(
"(.*) Car(.*)" => "is_a_Araba", // "Araba" mean car in english. İts mean this ( in regex ) string mean car.
"(.*) Apple(.*)" => "is_a_Elma" // "Elma" mean apple in english. İts mean this ( in regex ) string mean apple.
);
İ有一個字符串,像這樣:
“ 1.蘋果,太棒了。”
İ需要,如果我這樣調用函數;
function_name("1. Apple, it is awesome.", $translated_array)
this return : "is_a_Elma".
function_name("1. Car, it is awesome.", $translated_array)
this return : "is_a_Araba".
問題2 :
$translated_array = array(
"Car name: (.*), (.*) offers." => "This car name is $1, have $2 offers."
);
功能:
function_name("Car name: Bugatti, 5 offers.", $translated_array)
this return : "This car name is Bugatti, have 5 offers.".
我的試用
©知道這是我的問題的解決方案,但我需要比此功能更快的速度。 像array_regex(“汽車名稱:布加迪,5個優惠。”,$ translated_array)(是示例)
因此,我不需要循環所有字符串值。 (具有1000 +轉換后的值。)
foreach($translated_array as $key => $value):
if(preg_match('/'.$key.'/',$mystring)): return $value; break; endif;
continue;
endforeach;
您可以創建一個小函數,該函數將針對正則表達式和每個數組索引搜索匹配項,如果找到匹配項,則返回該值。 遵循以下原則:
function arrayFindKey($expr, array $array) {
foreach ($array as $key => $value) {
if (preg_match($expr, $key)) {
return $value;
}
}
}
$array = array(
"1. Apple, it is awesome." => "is_a_Elma",
"1. Car, it is awesome." => "is_a_Araba",
);
print arrayFindKey("/(.*) Apple(.*)/", $array);
我猜您也可以嘗試使用單個字符串搜索匹配項,例如:
function arrayFindKey($expr, array $array) {
// each key is separated by a '#' character
$keys = '#' . implode('#', array_keys($array)) . '#' ;
$matches = [];
// if a match is found then index 1 will hold the key
if (preg_match('/#(' . $expr . ')#/', $keys, $matches)) {
return $array[$matches[1]];
}
}
注意,您需要排除#
字符,因為它被用作每個數組鍵之間的分隔符:
print arrayFindKey("[^#]+Apple[^#]+", $array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.