排序分隔文本文件Php

时间:2013-07-15 21:40:25

标签: php

我有一个文本文件,我想通过PHP排序,我有点难过,因为sort()或asort()会排序行中的第一个字母而不是特定部分

我会使用

将所有文本读取到数组行
    $list = array(file($filename, FILE_IGNORE_NEW_LINES));

但你如何实现sort()?

所以我的文本文件包含

    Name1→Text1→1→1→1062166→3499999999
    Name2→Text2→1→1→1332130→1999999999
    Name3→Text3→1→1→1040121→8249999999
    Name4→Text4→1→1→1060075→7249999999
    Name5→Text5→1→1→1402172→249999999
    Name6→Text6→1→1→1222044→199999999
    Name7→Text7→1→1→1542015→299999999

我希望输出与最后一个数字分开,因此输出应为

    Name6→Text6→1→1→1222044→199999999
    Name5→Text5→1→1→1402172→249999999
    Name7→Text7→1→1→1542015→299999999
    Name2→Text2→1→1→1332130→1999999999
    Name1→Text1→1→1→1062166→3499999999
    Name4→Text4→1→1→1060075→7249999999
    Name3→Text3→1→1→1040121→8249999999

2 个答案:

答案 0 :(得分:1)

您可以使用密钥循环并构建一个数组,并对该数组进行排序并获取您的值。在下面的代码示例中,我使用作为文字值,但如果您的意思是tab char将替换为\t。您也可以使用explode

$list = file($filename, FILE_IGNORE_NEW_LINES);

$new = array();
foreach ($list as $item) {
    preg_match("/^(.*)(→[^→]+)$/", $item, $matches);
    $new[$matches[1]] = $item; 
}

ksort($new);

$list = array_values($new);

答案 1 :(得分:0)

尝试这样的事情(我假设你的意思是{tab})

$fp = fopen ($filename, "r");
$contents = array();
while($contents[] = fgetcsv($fp, 0, "\t"){}
fclose($fp);
usort($contents, function($a, $b) {return strnatcmp($a[5],$b[5]); });

请注意,此语法需要php 5.3 +

注意

更改为返回strnatcmp以防止数字溢出。