0

将不胜感激任何帮助。:)

我有以下文本文件:

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() 来拆分数据(制表符分隔):

$array = explode("\t", $a);

这使名称成为数组中的第二个元素。

如何将字符串重新组合在一起,首先是名称,然后是房间和电子邮件?谢谢。

4

3 回答 3

2

做一个var_dump($array),它会显示你的索引。然后,您只需要相互交换两个元素。这是一个技巧:

list($array[0], $array[1]) = array($array[1], $array[0]);

之后,您可以按照自己implode的方式获得结果explode

$line = implode("\t", $array);

希望这会有所帮助。啊,好吧,为了排序,看看array_multisort.

于 2012-04-15T22:26:17.030 回答
0

PHP 不是这项工作的最佳工具。

awk -F"\t" '{print $2"\t"$1"\t"$3}' infile | sort > outfile
于 2012-04-15T22:35:55.737 回答
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

)

建议

使用标准格式 suvh as csv,jsonxml

我会尝试用 preg_match 改进它

于 2012-04-15T23:14:20.437 回答