感谢任何帮助。:))
我有以下文本文件:
roomA Springer, Jerry js@email.com
roomB Cruise, Tom tc@email.com
roomC Jovi, Bon bj@email.com
我希望按姓氏对其进行排序,以便输出:
Cruise, Tom roomB tc@email.com
Jovi, Bon roomC bj@email.com
Springer, Jerry roomA js@email.com
我知道如何加载文件:
$a = file("details.txt");
并认为我必须使用explode()来分割数据(tab-seperated):
$array = explode("\t", $a);
这使得名称成为数组中的第二个元素。
如何将字符串重新放在首位,然后是房间和电子邮件? 感谢。
答案 0 :(得分:2)
执行var_dump($array)
,它会显示索引。然后,您只需要互相交换两个元素。这是一个技巧:
list($array[0], $array[1]) = array($array[1], $array[0]);
之后,您可以explode
$line = implode("\t", $array);
结果implode
结果:
{{1}}
希望这有帮助。好吧,为了排序,请看看array_multisort
。
答案 1 :(得分:0)
PHP不是这项工作的最佳工具。
awk -F"\t" '{print $2"\t"$1"\t"$3}' infile | sort > outfile
答案 2 :(得分:0)
您的数据不是我知道的已知格式..它们之间的tabs
和space
不是一成不变的;
*不要在生产中使用..我不得不破解我的方式*
尝试
$note = "roomA Springer, Jerry js@email.com
roomB Cruise, Tom tc@email.com
roomC Jovi, Bon bj@email.com";
$data = array();
$info = explode("\n", $note);
echo"<pre>" ;
foreach($info as $line)
{
$words = preg_split("/\\s/", $line);
$words = array_filter($words); // remove spaces
$words = array_values($words); // To reset the keys
$data[$words[1] . $words[2]] = $words[1] . $words[2] ."\t" . trim($words[0]) . "\t" . trim($words[3]) . "\n";
}
asort($data); //Sorting the data ;
print_r(array_values($data));
输出
Array
(
[0] => Cruise,Tom roomB tc@email.com
[1] => Jovi,Bon roomC bj@email.com
[2] => Springer,Jerry roomA js@email.com
)
建议
使用标准格式为csv
,json
或xml
我会尝试使用preg_match
来改进它