Intereting Posts
mySQL Group по имени участника loadHTML LIBXML_HTML_NOIMPLIED на фрагменте html генерирует неправильные теги Magento getUrl не работает с объектом каталога / категории? Laravel 4 красноречивый ГДЕ с ИЛИ ИЛИ ИЛИ? Regex получает строку после ключевого слова Как читать карту в веб-приложении php, написанном с использованием Boost C ++ (в общей области)? Как я могу получить идентификатор пользователя facebook, который нажал кнопку? Выполняются ли множественные назначения переменных по значению или ссылке? .htaccess разрешает доступ и перенаправление на root index.php только для одного каталога Условная проверка диапазона дат mysqli для печати цены в sql Преобразование CSV в JSON с помощью PHP Удалите все знаки препинания из строки php для дружественного seo url php регулярное выражение как получить последнюю часть строки возможно ли получить список определенных пространств имен Ошибка при обновлении таблицы MySQL

Простой способ подсчета гласных в строке в PHP?

Если я определяю простую строковую переменную, как бы я мог бы подсчитать и вывести количество гласных в строке самым простым способом?

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

Моя строковая переменная будет выглядеть примерно так:

$someString = "This is some text with some more text and even more text." 

Я просто хочу показать общие экземпляры a, e, i, o, u. Заранее спасибо.

Вот простое решение:

 <?php $string = "This is some text with some more text and even more text."; echo "There are <strong>".preg_match_all('/[aeiou]/i',$string,$matches)." vowels</strong> in the string <strong>".$string."</strong>"; ?> 

Почему не просто

 $Vowels = substr_count($someString, 'a')+substr_count($someString, 'e')+substr_count($someString, 'i')+substr_count($someString, 'o')+substr_count($someString, 'u'); 

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

 function CountVowels($String) { return substr_count($String, 'a')+substr_count($String, 'e')+substr_count($String, 'i')+substr_count($String, 'o')+substr_count($String, 'u'); } echo CountVowels('This is some text with some more text and even more text.'); //Echos 17 

непроверенный, но должен работать:

 $matches = preg_match_all('/[aeiou]/i', $someString, $ignore); 
 preg_match('#[aeiou]#i', $someString, $matches); echo count($matches) - 1, "\n"; 

Что-то вроде этого должно работать. Я не могу придумать более простой метод.

Вот еще один способ сделать это …

 $vowels = array('a', 'e', 'i', 'o', 'u'); $vowelsCounts = array_sum( array_intersect_key( array_count_values( str_split( strtolower($str) ) ), array_flip($vowels) ) ); 

CodePad .

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

 str_replace($vowels, FALSE, $str, $vowelsCounts); 

CodePad .

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

Я считаю, что этот код лучше по памяти и времени выполнения

 $counter = 0; $a = array("a","e","i","o","u"); foreach (count_chars($str, 1) as $k => $v) { //echo "There were $v instance(s) of \"" .$k."/". chr($k) . "\" in the string.\n"; if(in_array(strtolower(chr($k)), $a)) $counter += $v; } 
 $someString = "This is some text with some more text and even more text."; echo preg_match_all('/[aouie]/i', $someString, $out); 

Не подходит для строк в многобайтовых наборах символов.

 function countSpecificChars ($string, $charsOfInterest) { $count = 0; $len = strlen($string); for ($i = 0; $i < $len; $i++) { if (in_array($string[$i], $charsOfInterest)) { $count++; } } return $count; } function countVowels ($string) { return countSpecificChars($string, array('a', 'e', 'i', 'o', 'u')); } echo countVowels('This is some text with some more text and even more text.'); // echoes '17' 
 $someString = "This is some text with some more text and even more text."; $total = 0; $vowels = Array('a','e','i','o','u'); for ($i=0;$i<strlen($someString);$i++) { for ($j = 0;$j<5;$j++) if ($someString[$i] == $vowels[$j]) { $total++; break; } } echo $total; 

Подсчитайте гласный в строке, используя функцию в php.

 echo substr_count("£string","a")+substr_count("£string","e")+substr_count("£string","i")+substr_count("£string","o")+substr_count("£string","u");