如何快速、最优地从文本中提取数组中所有带有字母“ӣ”的单词?

How to quickly and optimally pull out of the text all the words with the letter "ӣ" in the array?

我有简单的文本,我想从文本到数组值中获取所有带有字母“ӣ”的单词。例如我的文字:

$text = "тоҷикӣ  барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";

如果文本找到带有字母“ӣ”的单词,则将该单词和同一单词右侧的另一个单词添加到数组中。另一个取那个词和左边的另一个词并将其添加到数组中。 大致应该是这样的结果:

$result = array(
"тоҷикӣ  барои",
"забони тоҷикӣ",
"тоҷикӣ ва",
"забони давлатӣ",
"давлатӣ ба",
"забонҳои ҳориҷӣ",
"ҳориҷӣ ба",
"забони русӣ",
"русӣ, англисӣ",
"англисӣ, ӯзбекӣ",
"ӯзбекӣ ва",
"ва арабӣ",
"арабӣ омӯзонида"
);

我的代码要爆两个字。我只能拆分一行两个字:

$text = "тоҷикӣ  барои забони тоҷикӣ ва барои давлати мо ҳамчун забони давлатӣ ба ҳисоб меравад. Дар давлати мо забонҳои ҳориҷӣ ба монанди забони русӣ, англисӣ, ӯзбекӣ ва арабӣ омӯзонида мешаванд.";
    $array = array();

    preg_match_all('/([А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+(?: [А-Яа-я0-9ҚӢҒҶҲӮқӣғҷҳӯ\.]+)?)/u',$text,$array);
    echo"<pre>";
    print_r($array);
    echo"<pre>";
    echo "<hr>";
    function array_flatten($array) { 
      if (!is_array($array)) { 
        return FALSE; 
      } 
      $result = array(); 
      foreach ($array as $key => $value) { 
        if (is_array($value)) { 
          $result = array_merge($result, array_flatten($value)); 
        } 
        else { 
          $result[$key] = $value; 
        } 
      } 
      return $result; 
    }

    $array = array_flatten($array);

    $array = array_filter(array_unique($array));



    foreach ($array as $key => $value) 
    {
         if (stripos($value, " ") === false) 
         {
            unset($array[$key]);
         }
    }



    echo"<pre>";
    print_r($array);
    echo"<pre>";

    /* Output
    Array
    (
        [1] => барои забони
        [2] => тоҷикӣ ва
        [3] => барои давлати
        [4] => мо ҳамчун
        [5] => забони давлатӣ
        [6] => ба ҳисоб
        [7] => меравад. Дар
        [8] => давлати мо
        [9] => забонҳои ҳориҷӣ
        [10] => ба монанди
        [11] => забони русӣ
        [13] => ӯзбекӣ ва
        [14] => арабӣ омӯзонида
    )
    */

我会先拆分单词,然后使用 array_reduce 检查每一对单词,看看其中是否包含目标字母,如果包含,则在输出中包含该对:

$result = [];
array_reduce(preg_split("~\s+~", $text), function($prev, $word) use (&$result) {
    if ($prev && (strpos($prev, "ӣ") !== false || strpos($word, "ӣ") !== false)) {
        $result[] = "$prev $word";
    }
    return $word;
});

对于您的 $text 值,$result 将是:

array (
  'тоҷикӣ барои',
  'забони тоҷикӣ',
  'тоҷикӣ ва',
  'забони давлатӣ',
  'давлатӣ ба',
  'забонҳои ҳориҷӣ',
  'ҳориҷӣ ба',
  'забони русӣ,',
  'русӣ, англисӣ,',
  'англисӣ, ӯзбекӣ',
  'ӯзбекӣ ва',
  'ва арабӣ',
  'арабӣ омӯзонида',
)