我想,列出目錄文件名算
- 檢查字數一個完整的文本文件的文件夾。
- 輸出的字排列的文件列表格式數 - 文件名是WORDCOUNT
我知道str_word_count被用來獲取文件個別wordcounts,但我不知道如何重新排列輸出。
在此先感謝。
我想,列出目錄文件名算
我知道str_word_count被用來獲取文件個別wordcounts,但我不知道如何重新排列輸出。
在此先感謝。
改編自here。
<?php
$files = array();
$it = new DirectoryIterator("/tmp");
$it->rewind();
while ($it->valid()) {
$count = str_word_count(file_get_contents($it->getFilename()));
$files[sprintf("%010d", $count) . $it->getFilename()] =
array($count, $it->getFilename());
$it->next();
}
ksort($files);
foreach ($files as $tup) {
echo sprintf("%s is %d\n", $tup[1], $tup[0]);
}
編輯這將是更優雅有$file
的關鍵是文件名和$file
的值是一個字一個值計數,然後排序。
我不使用PHP的,但我會
要存儲信息(#2),我會將信息放入二維數組中。在Free PHP Tutorial中有關於二維數組here的更多信息。因此array [0] [0]將等於第一個文件的名稱,而數組0將是wordcount。數組1 [0]和數組1將用於下一個文件。
要對數組進行排序(#3),您可以使用教程firsttube.com。
輸出我會做一個循環通過陣列和輸出的第一和第二個位置。
for ($i = 0; $i < sizeof($array); ++$i) {
print the filename ($array[$i][0]) and wordcount ($array[$i][1])
}
如果你想保持迭代風格的方法(但仍然基本上與Artefacto的回答相同),那麼類似下面的內容就足夠了。
$dir_it = new FilesystemIterator("/tmp");
// Build array iterator with word counts
$arr_it = new ArrayIterator();
foreach ($dir_it as $fileinfo) {
// Skip non-files
if (! $fileinfo->isFile()) continue;
$fileinfo->word_count = str_word_count(file_get_contents($fileinfo->getPathname()));
$arr_it->append($fileinfo);
}
// Sort by word count descending
$arr_it->uasort(function($a, $b){
return $b->word_count - $a->word_count;
});
// Display sorted files and their word counts
foreach ($arr_it as $fileinfo) {
printf("%10d %s\n", $fileinfo->word_count, $fileinfo->getFilename());
}
除了:如果文件特別大(閱讀:加載每一個完全到內存只是來算的話實在是太多了),那麼你可以遍歷文件中的行由行(或者如果你真的想要逐字節)與SplFileObject
。
它會輸出文件,但不會按字數統計 – usertest 2010-06-21 17:35:00
@user確定嗎?最初的版本有一些錯誤,我希望糾正。 – Artefacto 2010-06-21 17:44:53
我認爲probem是ksort按鍵排列,在這種情況下是文件名? – usertest 2010-06-21 17:48:29