如何根据每个txt文件的第二行对php中的txt文件进行排序

时间:2019-12-07 11:23:58

标签: php arrays sorting foreach

我有几个.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 ...

1 个答案:

答案 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