douyuan6490 2009-10-31 03:26
浏览 17
已采纳

用PHP计算单词中的字母数

I want to create an array which has two columns. The output should contain only the existing letters in the word with their amounts.

The wanted output of the following code

a 3
s 2
p 1

What is wrong in the following PHP code?

<?php

$alpha = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','z','y');

$word = "saapas";

for ( $i = 0; $i < count($word); $i++ ) {
        echo $word[$i] . "
";

        $table[$word[$i]][]++;           // Problem here
}


// array_unique, array_combine and some method which can sort arrays by alphabets can be useful 
  • 写回答

6条回答 默认 最新

  • douxian5963 2009-10-31 03:58
    关注

    PHP has extensive array functions that do much of the heavy lifting for this:

    $keys = range('a', 'z');
    $values = array_fill(0, 26, 0);
    $freq = array_combine($keys, $values);
    $word = "saapas";
    $len = strlen($word);
    for ($i=0; $i<$len; $i++) {
      $letter = strtolower($word[$i]);
      if (array_key_exists($letter, $freq)) {
        $freq[$letter]++;
      }
    }
    print_r($freq);
    

    Output:

    Array
    (
        [a] => 3
        [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] => 1
        [q] => 0
        [r] => 0
        [s] => 2
        [t] => 0
        [u] => 0
        [v] => 0
        [w] => 0
        [x] => 0
        [y] => 0
        [z] => 0
    )
    

    If you want to distinguish between uppercase and lowercase try:

    $keys = array_merge(range('a', 'z'), range('A', 'Z'));
    $values = array_fill(0, 52, 0);
    $freq = array_combine($keys, $values);
    $word = "saApas";
    $len = strlen($word);
    for ($i=0; $i<$len; $i++) {
      $letter = $word[$i];
      if (array_key_exists($letter, $freq)) {
        $freq[$letter]++;
      }
    }
    print_r($freq);
    

    Or to count any characters:

    $freq = array();
    $word = "saApas";
    $len = strlen($word);
    for ($i=0; $i<$len; $i++) {
      $letter = $word[$i];
      if (array_key_exists($letter, $freq)) {
        $freq[$letter]++;
      } else {
        $freq[$letter] = 1;
      }
    }
    print_r($freq);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?