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 を持つ他の配列の値が 1 つ増えることです ($alfabet[A]++; のように)。

誰でもこのループで私を助けることができますか? 私はこのatmを持っています:

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 に答える