Если я определяю простую строковую переменную, как бы я мог бы подсчитать и вывести количество гласных в строке самым простым способом?
Я искал и нашел несколько подобных способов, но большинство кажется более сложным, чем необходимо. Все они функциональны и, возможно, сложность необходима, но я ищу простейшее решение.
Моя строковая переменная будет выглядеть примерно так:
$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");