Как посчитать строку хинди в массиве с php и посчитать, сколько букв и гласных в строке

У меня есть что-то вроде

$a = "आलोक"

Я хочу добиться чего-то вроде в php

a[0] = आ  
a[1] = लो  
a[3] = क 

Я хочу считать в числах, таких как:- я поставил имя आलोक я хочу выводить, как буква =3 и гласная =2, потому что в आलोक первая буква (आ), вторая буква (लो) и третья буква ((). так что ставь ставь буква =3, а для гласной, первый гласный ( ा) и второй гласный (ो) так что ставь гласный =2

имя может быть динамическим, а не статичным

1 ответ

Решение

Я просматривал другой вопрос, который вы опубликовали, и принятый ответ предлагает функцию в следующих строках, чтобы разбить строку на символы:

 function mbStringToArray ($string) {
  $strlen = mb_strlen($string);
   while ($strlen) {
    $array[] = mb_substr($string,0,1,"UTF-8");
    $string = mb_substr($string,1,$strlen,"UTF-8");
    $strlen = mb_strlen($string);
  }
  return $array;
 } 
  $a = "आलोक"; 
  print_r(mbStringToArray($a));

Если вы запустите этот код, он даст вам следующий вывод:

  Array
  (
   [0] => आ
   [1] => ल
   [2] => ो
   [3] => क
  )

Я собираюсь опираться на эту функцию и просто немного ее расширить, и вы сможете легко получить количество гласных и согласных.

К счастью, я нашел это удобное руководство по кодировкам UTF-8 всех символов в сценарии Девнагри. Http://unicodelookup.com/ - еще один простой инструмент для подтверждения и получения десятичных и восьмеричных представлений, а также для этих символов.

Со стола я поднял глаза 0x093F и легко сопоставить его с ि.

Теперь, когда у вас есть это, нужно просто получить декодированный символ юникода из HEX-кода. Вы можете легко достичь этого с помощью:

echo json_decode('"\u093F"'); //Ouputs  ि

Я объединил эти шаги в функцию под названием countVowels:

 function countVowels ($req){

   //I have hard coded the hex values of some characters that are vowels in Hindi
   //This does NOT include all the vowels
   //You might want to add more as per your needs from the table that I have provided before

   $hindi = array("\u0906","\u0908","\u093E","\u093F","\u0945","\u0946","\u0947","\u0948","\u0949","\u094A","\u094B","\u094C","\u094D");
   $vowels= array();
   $vowelcount = 0;
   for($i = 0; $i<count($hindi); $i++){

     //Push the decoded unicode character into the $vowels array
     array_push($vowels,json_decode('"'.$hindi[$i].'"')); 
   }

   for($j=0;$j<count($req);$j++){
      if(in_array($req[$j], $vowels))
        $vowelcount++;
   }
   return $vowelcount;
 }

Вход для этой функции $req который может быть выходным массивом для ранее определенной функции mbStringToArray, Если у вас есть количество гласных, вы можете легко получить количество других согласных. Поток может выглядеть примерно так:

  $a = "आलोक"; 
  $arr = mbStringToArray($a)
  $vows = countVowels($arr); //Number of vowels 
  $cons = count($arr) - $vows; //Number of consonants

Таким образом, в этом случае возвращенные согласные были бы равны 2, а гласные также были бы равны 2. Это потому, что я жестко закодировал आ как гласный, и поэтому он учитывается в countVowels функция. Посмотрите на рабочую демонстрацию.

Вы можете изменить массив, который я там использую, и позаботиться о таких расхождениях в соответствии с вашими требованиями. Я надеюсь, что это поможет вам начать в правильном направлении.

Другие вопросы по тегам