【问题标题】:PHP array not mergingPHP数组未合并
【发布时间】:2017-06-24 12:26:27
【问题描述】:

我有这段代码可以从文本文件中执行单词排名。它打开文件并输出文件中每个单词出现多少次的数组。这部分运行良好,但在第二部分,代码将查看给定文件夹中的所有其他文本文件,并输出每个单词在所有文件中出现的总次数。问题是输出数组不是合并总数。有重复。例如,我得到 -

the -- 2
quick -- 1
brown -- 1
fox -- 1
jumped -- 1
over -- 1
lazy -- 1
dog -- 1
dog -- 2
a -- 2
lazy -- 1
fox -- 1
cannot -- 1
catch -- 1
fast -- 1
the -- 1
may -- 1
be -- 1

而不是-

the -- 3
dog -- 3
fox -- 2
lazy -- 2
a -- 2
quick -- 1
brown -- 1
jumped -- 1
over -- 1
very -- 1
cannot -- 1
catch -- 1
fast -- 1
may -- 1
be -- 1

这是整个代码-

<?php
echo "<h3>Word Rank From One File</h3>";
$counted = strtolower(file_get_contents("docs/one.txt"));
$wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY);
$wordFrequencyArray = array_count_values($wordArray);

/* Sort array from higher to lower, keeping keys */
arsort($wordFrequencyArray);

/* grab Top 10, huh sorted? */
$top10words = array_slice($wordFrequencyArray,0,10);

/* display them */
foreach ($top10words as $topWord => $frequency)
    echo "$topWord --  $frequency<br/>";

echo "<h3>Total From All Files</h3>";
$path = realpath('docs');
foreach(glob($path.'/*.*') as $file) {
    $counted = strtolower(file_get_contents($file));
    $wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY);
    $wordFrequencyArray = array_count_values($wordArray);
    $combine = array_merge($wordFrequencyArray);
    /* Sort array from higher to lower, keeping keys */
    arsort($wordFrequencyArray);

    /* grab Top 10, huh sorted? */
    $top10words = array_slice($wordFrequencyArray,0,10);

    /* display them */
    foreach ($top10words as $topWord => $frequency)
        echo "$topWord --  $frequency<br/>";
    }

?>

我做错了什么或没有做什么? 这两个示例文本文件有;

敏捷的棕色狐狸跳过了懒惰的狗。狐狸跳的那条狗后来跑得那么快。

一只懒惰的狐狸抓不到一只跑得快的狗。狗可能很快。 我也注意到有些词被跳过了。

【问题讨论】:

  • array_merge 接受一个或多个数组进行合并,你用 $combine = array_merge($wordFrequencyArray) 做什么?
  • 我正在尝试从已读取的文本文件中合并输出数组。就像合并 one.txt 和 two.txt 的输出一样。所以我假设 $wordFrequencyArray 包含两个不同的输出。

标签: php arrays sorting ranking array-merge


【解决方案1】:

您必须汇总文件中的所有单词,然后计算其频率。

$wordArrayTotal = [];
foreach (glob($path.'/*.*') as $file) {
    $counted = strtolower(file_get_contents($file));
    $wordArray = preg_split('/[^a-z]/', $counted, -1, PREG_SPLIT_NO_EMPTY);
    $wordArrayTotal = array_merge($wordArrayTotal, $wordArray);
}

$wordFrequencyArray = array_count_values($wordArrayTotal);

/* Sort array from higher to lower, keeping keys */
arsort($wordFrequencyArray);

/* grab Top 10, huh sorted? */
$top10words = array_slice($wordFrequencyArray, 0, 10);

/* display them */
foreach ($top10words as $topWord => $frequency) {
    echo "$topWord --  $frequency<br/>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多