PHP数组未合并
我有一段代码,可以从文本文件中执行单词排序。它打开文件并输出一个数组,该数组显示文件中每个单词出现的次数。这一部分工作得很好,但在第二部分,代码将检查给定文件夹中的每个其他文本文件,并输出所有文件中每个单词的总显示次数。问题是输出数组不是合并的总数。有重复。例如,我-PHP数组未合并,php,arrays,sorting,ranking,array-merge,Php,Arrays,Sorting,Ranking,Array Merge,我有一段代码,可以从文本文件中执行单词排序。它打开文件并输出一个数组,该数组显示文件中每个单词出现的次数。这一部分工作得很好,但在第二部分,代码将检查给定文件夹中的每个其他文本文件,并输出所有文件中每个单词的总显示次数。问题是输出数组不是合并的总数。有重复。例如,我- the -- 2 quick -- 1 brown -- 1 fox -- 1 jumped -- 1 over -- 1 lazy -- 1 dog -- 1 dog -- 2 a -- 2 lazy -- 1 fox -- 1
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/>";
}
?>
我做错了什么或没有做什么?
这两个示例文本文件具有:
那只敏捷的棕色狐狸跳过了那只懒狗。狐狸跳的那条狗后来跑得很快
及
懒惰的狐狸抓不到快狗。这条狗可能很快。
我也注意到有些词被跳过了
您必须聚合文件中的所有单词,然后计算其频率
$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/>";
}
$wordArrayTotal=[];
foreach(全局($path./*.*)作为$file){
$counted=strtolower(文件获取内容($file));
$wordArray=preg_split('/[^a-z]/',$counted,-1,preg_split_NO_EMPTY);
$wordArrayTotal=array\u merge($wordArrayTotal,$wordArray);
}
$wordFrequencyArray=数组\计数\值($wordArrayTotal);
/*将数组从高到低排序,保留键*/
arsort($wordFrequencyArray);
/*抓住前10名,是吗*/
$top10words=array\u片($wordFrequencyArray,0,10);
/*展示它们*/
foreach($top10words为$topWord=>$frequency){
回声“$topWord--$frequency
”;
}
array\u merge接受一个或多个数组进行合并,您使用$combine=array\u merge($wordFrequencyArray)做什么?我正在尝试合并已读取文本文件中的输出数组。类似于合并one.txt和two.txt的输出。所以我假设$wordFrequencyArray包含两个不同的输出。