0

我必须用索引 AZ(字母表)创建一个数组。每个索引必须有一个值 0。所以我制作了这个数组:

$alfabet = array(
'A' => 0,
'B' => 0,
'C' => 0,
'D' => 0,
'E' => 0,
'F' => 0,
'G' => 0,
'H' => 0,
'I' => 0,
'J' => 0,
'K' => 0,
'L' => 0,
'M' => 0,
'N' => 0,
'O' => 0,
'P' => 0,
'Q' => 0,
'R' => 0,
'S' => 0,
'T' => 0,
'U' => 0,
'V' => 0,
'W' => 0,
'X' => 0,
'Y' => 0,
'Z' => 0
);

我还从文件中获取了文本 ($text = file_get_contents('tekst15.txt');) 我已将该文件中的字符放入数组中: $textChars = str_split ($text); 并从 AZ 排序:sort($textChars);

我想要的是(使用 for 循环)当他在 textChars 数组中找到一个 A 时,另一个索引为 A 的数组的值增加一(比如:$alfabet[A]++;

谁能帮我解决这个循环?我有这个自动取款机:

for($i = 0; $i <= count($textChars); $i++){

while($textChars[$i] == $alfabet[A]){
$alfabet[A]++;
}


}
echo $alfabet[A];

问题 1:我想将 alfabet 数组循环到,所以现在我只检查 A 但我想检查所有索引。问题2:这现在为我尝试的每个字母索引返回 7,所以它完全错误:)

我对我的英语感到抱歉,但感谢您的时间。

4

4 回答 4

2

听说过foreach循环吗?

foreach ($textChars as $index => $value) {
    $alfabet[$value]++;
}
于 2012-11-25T16:56:13.377 回答
0

我假设你的$textChars数组看起来像

$textChars = array (
    0 => 'A',
    1 => 'A',
    2 => 'B',
);

如果是这样,您可以遍历它并使用它的值来检查给定索引是否存在$alfabet,然后增加它。

foreach($textChars as $char){
    if(isset($alfabet[$char])){
        $alfabet[$char]++;
    }
}
于 2012-11-25T17:05:18.787 回答
0

count_chars()功能可以立即为您提供该信息:

$stats = count_chars(file_get_contents('tekst15.txt'));

echo $stats['A']; // number of 'A' occurrences
echo $stats['O']; // number of 'O' occurrences

从您的代码:

while($textChars[$i] == $alfabet[A]){
   $alfabet[A]++;
}

完全没有意义;它将文本文件中的每个字符与最初的值$alfabet[A]0甚至不是字母!)进行比较。

正确的说法是:

$alfabet[$textChars[$i]]++;
于 2012-11-25T17:09:33.753 回答
0
$fp = fopen('tekst15.txt', 'r');
if (!$fp) {
    echo 'Could not open file tekst15.txt';
}
while (false !== ($char = fgetc($fp))) {
    if(isset($alfabet[strtoupper($char)]))
    { $alfabet[strtoupper($char)] = $alfabet[strtoupper($char)]+1; }
}
于 2012-11-25T17:15:35.993 回答