如何使用PHP中的第二个元素按字母顺序对数组进行排序

时间:2012-04-15 22:22:55

标签: php arrays sorting explode

感谢任何帮助。:))

我有以下文本文件:

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);

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

如何将字符串重新放在首位,然后是房间和电子邮件? 感谢。

3 个答案:

答案 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)

您的数据不是我知道的已知格式..它们之间的tabsspace不是一成不变的;

*不要在生产中使用..我不得不破解我的方式*

尝试

$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

)

建议

使用标准格式为csvjsonxml

我会尝试使用preg_match

来改进它