簡體   English   中英

使用正則表達式在數組鍵中查找字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM