用PHP计算数组中元音的数量

时间:2015-04-19 23:49:01

标签: php

在PHP中,我编写了一个脚本来计算数组中元音的数量并输出结果。

运行脚本时出现Undefined offset错误。

此代码有什么问题?

for($a = 0; $a < count($expld); $a++) {
    for($b = 0; $b < strlen($expld[$b]); $b++) {
        if ($expld[$b] == 'A' || $expld[$b] == 'a' || $expld[$b] == 'E' || $expld[$b] == 'e'
            || $expld[$b] == 'I' || $expld[$b] == 'i' || $expld[$b] == 'O' || $expld[$b] == 'o'
            || $expld[$b] == 'U' || $expld[$b] == 'u')
        {
            $vowel++;
        }
    }
    echo "$expld[$a] has $vowel vowels(s).<br> ";
}

4 个答案:

答案 0 :(得分:2)

正如另一种可能的解决方案。您可以使用正则表达式:

$stringToTest = implode($expld);
$vowelsCount = strlen(preg_replace('/[^aeiouAEIOU]/', '', $stringToTest));

这里我们从字符串中删除除元音之外的所有内容,然后计算剩下的字符(这应该只是一个元音)。

答案 1 :(得分:2)

您可以检查元音是否存在于元音数组中。这样你就不用做冗长的检查了!这是一个代码...

// vowels
$vowels = array('a', 'e', 'i', 'o', 'u');

for ($a = 0; $a < count($expld); $a++) {
    // init count
    $vowel_count = 0;

    for ($b = 0; $b < strlen($expld[$b]); $b++) {
        if (in_array(strtolower($expld[$a][$b]), $vowels)) {
            $vowel_count++;
        }
    }
    echo "$expld[$a] has $vowel_count vowels(s).";
}

希望这有帮助。谢谢!

答案 2 :(得分:1)

看起来你搞砸了索引,检查出来:

for($a = 0; $a < count($expld); $a++)
{
    $vowel = 0;
    for($b = 0; $b < strlen($expld[$a]); $b++)
    {
        if($expld[$a][$b] == 'A' || $expld[$a][$b] == 'a' || $expld[$a][$b] == 'E' || $expld[$a][$b] == 'e'
        || $expld[$a][$b] == 'I' || $expld[$a][$b] == 'i' || $expld[$a][$b] == 'O' || $expld[$a][$b] == 'o'
        || $expld[$a][$b] == 'U' || $expld[$a][$b] == 'u')
        {
          $vowel++;
        }
    }
    echo "$expld[$a] has $vowel vowels(s).<br> ";
}

答案 3 :(得分:1)

首先,一些观察结果:

  • 您似乎没有正确使用$ a和$ b索引;你的第二个for-loop忽略了它在$ a中的位置!由于你在迭代数组中的每个字符串,更安全的赌注可能是使用foreach-loop(少一点跟踪)
  • 您没有定义元音数,因此不会显示0.此外,由于您没有重置元音数,因此计数会不断增加

这是一个使用foreach循环的示例(在PHP 5.4中测试):

$input = "Charles Schultz was here";

// Instead of adding a large if-elseif-elseif-... statement, define
//   the vowels in an array, then check if the value is in that array
$vowels = array('a','e','i','o','u','A','E','I','O','U');
$exploded = explode(" ", $input);

foreach($exploded as $string) {
    // Reset the counter for each word
    $count_vowels = 0;
    for($i = 0; $i < strlen($string); $i++) {
        if(in_array($string[$i], $vowels)) {
            $count_vowels++;
        }
    }
    echo "$string has $count_vowels vowel(s).<br />";
}