我正在编写一个函数来计算单词的音节,如下所示:
function estimate_syllables($word) {
$total_count=0;
foreach($word as $w) {
$syllable_count = count_english_vowels($w);
$total_count += $syllable_count;
}
return $total_count;
}
function count_english_vowels($word) {
static $english_vowels = array('A', 'E', 'I', 'O', 'U', 'Y');
$vowel_count = 0;
$letters = preg_replace('/[^a-z0-9]+/i', "", $word);
$len = strlen($letters);
$letters = str_split(strtoupper($letters));
$currPosition = -2;
$prevPosition = -1;
for($i = 0; $i < $len; $i++) {
if (in_array($letters[$i], $english_vowels)) {
if($i != $currPosition + 1) {
if ($letters[$i] == 'E' && $i != ($len -1))
$vowel_count++;
$prevPosition = $currPosition;
$currPosition = $i;
}
}
}
return $vowel_count;
}
我真的很困惑:如果你把count_english_vowels传给一个像水一样的单词,它会两次到达正确音节的内环,但计数器只报告1?超级困惑,有人能弄清楚出了什么问题吗?
因为这个原因,它只报告了一个:
if ($letters[$i] == 'E' && $i != ($len -1))
$vowel_count++;
$prevPosition = $currPosition;
$currPosition = $i;
water
中只有一个E
,因此它只执行$vowel_count++;
一次。根据您对该代码的缩进,我假设您需要在这些行周围使用{}
括号,因为如果没有它们,PHP将只应用if后面的第一行,所以如果该代码正确,您的缩进应该如下所示:
if ($letters[$i] == 'E' && $i != ($len -1))
$vowel_count++;
$prevPosition = $currPosition;
$currPosition = $i;