我正在尝试阅读一个包含21个名字的文本文件;
123, bill, bobs
124, joe, public
我已经能够将它们放入数组中,但我不知道如何将每个名称设置为变量,因为我需要根据它们的姓氏将它们按字母顺序排序。到目前为止,这是我的代码;
$file = fopen("students.txt", "r");
If ($file) {
while (!feof($file)) {
$array = explode("/n", fread($file, filesize("students.txt")));
print_r($array);
}
} else {
echo 'File unopened';
}
我尝试过以下代码,但似乎没有用;
fscanf ($fp, "%s, %s, %s/n", $num, $first, $last). "<br/>";
答案 0 :(得分:0)
只需将整个文件读入一个数组,然后展开每一行,然后将结果分开。
$array = file('your_file.txt');
if(false === $array) {
// you had a problem reading file
exit();
}
$exploded_array = array();
foreach($array as $csv) {
$exploded_array[] = explode(',', $csv)
}
usort($exploded_array, function ($a, $b) {
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
您还可以使用fgetscv()
代替file()
和explode()
的组合。无论哪种方式都差不多。
答案 1 :(得分:0)
您的文件相关代码过于复杂。
$users = file('students.txt', FILE_SKIP_EMPTY_LINES);
array_walk($users, function (&$val) {
$newAr = explode(',', $val);
$val = array_map('trim', $newAr);
});
usort($users, function($a, $b) {
return strnatcmp($a[2], $b[2]);
});
var_dump($users);
另外,您可以使用fgetcsv
从文件中获取值,因为@MarkB在您的问题的评论中指出了