在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> ";
}
答案 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)
首先,一些观察结果:
这是一个使用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 />";
}