Word&关联数组中的字母数

时间:2011-07-25 00:59:40

标签: php

我正在尝试学习一些PHP,而且我几个小时来一直在反对这个问题。在这一点上,我很确定我已经使它变得比它应该的复杂得多(我刚抓到的最后一次尝试是~100行长(不可否认,很多评论)。

这是我正在尝试做的事情:

读入一个字符串,将字符放在一个关联数组中,字母数字在其中 是一个关联的单词数组,按字母顺序排序,以及它们出现的次数。

该系列的下一个问题建立在这个问题的基础之上,所以我基本上已经死了,直到我能解决这个问题。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

$sample = "this my is sample which is simple";
$simple = explode(' ', $sample);

$words = array();
foreach ($simple as $word) {
   $size = strlen($word);
   if (!isset($words[$size])) {
      $words[$size] = array();
   }
   if (!isset($words[$size][$word])) {
      $words[$size][$word] = 0;
   }
   $words[$size][$word]++;
}
foreach ($words as &$w) {
   ksort($w);
}
ksort($words);

这有点令人讨厌,但它完成了工作。请注意,我颠倒了第一个“my”和“is”来显示字母顺序重新排序。

答案 1 :(得分:0)

假设没有标点符号担心尝试这个:

$words_by_length = array();
$string = "this is my sample which is simple";
$words = explode(' ', $string); //split the string by space to find all the words
foreach($words as $word) {
    $word_length = strlen($word);

    if(!isset($words_by_length[$word_length])) $words_by_length[$word_length] = array();
    $words_by_length[$word_length][] = $word;
}

ksort($words_by_length);
foreach($words_by_length as $length => $words) {
    $words_by_freq = array();
    foreach($words as $word) {
        if(!isset($words_by_freq[$word])) $words_by_freq[$word] = 0;
        $words_by_freq[$word]++;
    }
    ksort($words_by_freq);
    $words_by_length[$length] = $words_by_freq;
}