我有一个文本文件,我想通过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
答案 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以防止数字溢出。