PHP-alpha对一个目录中多个文件的行进行排序,并将它们保存到;x";alpha命名文件夹中的最大行数
下面的内容将遍历目录中的文件,读取它们并将它们保存在最多500行的文件中,保存到新目录中。 这对我来说很好(谢谢丹尼尔),但我需要修改。 我想保存到基于alpha num的文件 首先,我假设第一步是对数组进行字母数字排序(已经小写) 抓取每个$incoming./.txt中以“a”开头的所有行,并将它们放入$save500的文件夹中。“/a”,但每个最多500行。 (我想最好从排序顶部的第一个开始,所以“0”不是“a”,对吗?) 所有以数字开头的行进入$save500。“/num” 除a-z0-9外,所有管线均不得以任何东西开头 这将允许我使用此平面文件方法更有效地搜索匹配的文件。将其缩小为一个文件夹PHP-alpha对一个目录中多个文件的行进行排序,并将它们保存到;x";alpha命名文件夹中的最大行数,php,alpha,glob,Php,Alpha,Glob,下面的内容将遍历目录中的文件,读取它们并将它们保存在最多500行的文件中,保存到新目录中。 这对我来说很好(谢谢丹尼尔),但我需要修改。 我想保存到基于alpha num的文件 首先,我假设第一步是对数组进行字母数字排序(已经小写) 抓取每个$incoming./.txt中以“a”开头的所有行,并将它们放入$save500的文件夹中。“/a”,但每个最多500行。 (我想最好从排序顶部的第一个开始,所以“0”不是“a”,对吗?) 所有以数字开头的行进入$save500。“/num” 除a-z0-
$nextfile=0;
if (glob("" . $incoming . "/*.txt") != false){
$nextfile = count(glob("" . $save500 . "/*.txt"));
$nextfile++;
}
else{$nextfile = 1;}
/**/
$files = glob($incoming."/*.txt");
$lines = array();
foreach($files as $file){
$lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES));
}
$lines = array_unique($lines);
/*this would put them all in one file*/
/*file_put_contents($dirname."/done/allofthem.txt", implode("\n", $lines));*/
/*this breaks them into files of 500*/
foreach (array_chunk($lines, 500) as $chunk){
file_put_contents($save500 . "/" . $nextfile . ".txt", implode("\n", $chunk));
$nextfile++;
}
每一个仍然需要在一个最大的500行
稍后我将毕业于mysql。现在才做了几个月
似乎这还不够。我甚至想过去掉前两个角色。使用subs a/0到z/z制作目录
可能是上面的错误方法,因为没有响应
但是我想要一个像aardvark这样的单词保存到a/a文件夹的1.txt中(追加)。除非1.txt有500行,否则将其保存到a/a 2.txt
所以xenia会被附加到x/e文件夹1.txt文件中,除非有500行,所以创建2.txt并保存在那里
这样,我就可以更高效地搜索这些单词,而无需将大量内容加载到内存中,也无需遍历不包含匹配项的文件/行
谢谢大家 我在这里写了一些代码,这些代码应该可以满足您的需求,它不是一种性能美,但应该可以满足您的需求。在安全的环境中试用,不保证任何数据丢失;) 注释如果有任何错误,现在已经很晚了;)我得睡一会儿;) 注意:只有当每行至少有2个字符时,此选项才有效!;)
看我的答案,我已经更新了。谢谢。我每天做了16个小时,所以,我觉得是的。我相信我会在早上进行测试,并提供更多的荣誉。感谢so mich…“对第行的grouparray()的未定义调用等…”(第一次调用它的地方。)所以我将grouparray的所有实例都小写了,仍然是相同的错误。编辑-抱歉我的错误-我把整个例程都卡在了if(我想运行这个){this snippet}中。将继续测试。它应该可以工作。我已经用一个虚拟数组快速测试了它,然后尝试将函数移到顶部。否则,请重新发布你的源代码。工作,我发现我有一些带有或者——作为第二个角色(但绝不是第一个),我需要促进这些。所以,我想把a-ardvark放在a/sc文件夹中(sc=special character)。可能吗?我现在还想搜索这些文件,以便在将新文件添加到$incoming file/array之前,它可以在推动保存之前检查文件夹中是否存在重复文件。我应该再问一个问题吗。我如何让您知道我发布了这个新问题?将数组置于循环之外,因为它永远不会改变,这对性能更有利;)
$nextfile=0;
if (glob("" . $incoming . "/*.txt") != false){
$nextfile = count(glob("" . $save500 . "/*.txt"));
$nextfile++;
}
else
{
$nextfile = 1;
}
$files = glob($incoming."/*.txt");
$lines = array();
foreach($files as $file){
$lines = array_merge($lines, file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES));
}
$lines = array_unique($lines);
/*this would put them all in one file*/
/*file_put_contents($dirname."/done/allofthem.txt", implode("\n", $lines));*/
/*this breaks them into files of 500*/
// sort array
sort($lines);
// outer grouping
$groups = groupArray($lines, 0);
$group_keys = array_keys($groups);
foreach($group_keys as $cKey) {
// inner grouping
$groups[$cKey] = groupArray($groups[$cKey], 1);
foreach($groups[$cKey] as $innerKey => $innerArray) {
$nextfile = 1;
foreach(array_chunk($innerArray, 500) as $chunk) {
file_put_contents($save500 . "/" . $cKey . "/" . $innerKey . "/" . $nextfile . ".txt", implode("\n", $chunk));
$nextfile++;
}
}
}
function groupArray($data, $offset) {
$grouped = array();
foreach($data as $cLine) {
$key = substr($cLine, $offset, 1);
if(!isset($grouped[$key])) {
$grouped[$key] = array($cLine);
}
else
{
$grouped[$key][] = $cLine;
}
}
return $grouped;
}