Как посчитать строку хинди в массиве с 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
функция. Посмотрите на рабочую демонстрацию.
Вы можете изменить массив, который я там использую, и позаботиться о таких расхождениях в соответствии с вашими требованиями. Я надеюсь, что это поможет вам начать в правильном направлении.