我有几个.txt
文件,其中包含几行代码。每个txt文件的名称都有一个唯一的ID:
20191205140624.txt
20191206140309.txt
and so on...
所有txt文件都在messages文件夹中,我通过以下代码阅读了所有这些文件:
// read all files in messages folder
$dir = 'messages/';
if ($dh = opendir($dir)) {
while(($file = readdir($dh))!== false){
if ($file != "." && $file != "..") { // This line strips out . & ..
$entrylist[] = $file;
$lines = file($dir.$file);
$secondline = $lines[1]; // grab the second line
$globalArray[] = $secondline; // put all second lines in an array
}
}
sort($globalArray); // sort array
print_r($globalArray); // show me the array
}
因此var $entrylist
是所有txt文件的数组。
print_r($globalArray)
向我展示了根据姓氏排序的数组
要输出txt文件,请使用foreach:
// sort array
sort($entrylist);
foreach($entrylist as $file){
$entryfiles = 'messages/'.$file;
$lines = file($entryfiles, FILE_IGNORE_NEW_LINES);// filedata into an array
$file_id = $lines[0]; // file id
$surname= $lines[1]; // surname
$address= $lines[3];
and so on...
我的问题:
如何根据每个文件的第二行(姓氏)对foreach中的所有txt文件进行排序?
所以我要实现的目标是:sort($entrylist) based on second line of each txt file
...
答案 0 :(得分:2)
存储文件名时,最好使用该名称作为姓氏数组中的键。然后,您可以对数据进行排序,并保留键和数据,以便文件名保留在排序的输出中(使用asort()
而不是sort()
)。然后,您可以foreach()
覆盖结果,索引就是您的文件名...
if ($dh = opendir($dir)) {
while(($file = readdir($dh))!== false){
if ($file != "." && $file != "..") { // This line strips out . & ..
$lines = file($dir.$file);
$secondline = $lines[1]; // grab the second line
$globalArray[$file] = $secondline; // put all lines in array indexed by file name
}
}
asort($globalArray); // sort array preserving keys
print_r($globalArray); // show me the array
foreach($globalArray as $file => $surname){
echo $file.PHP_EOL;
}
}
我非常糟糕的测试数据给出了...
Array
(
[10.csv] => jones
[1.csv] => blogs
)
1.csv
10.csv