2012-04-15 69 views
0

將不勝感激任何幫助,按字母順序排列:)我如何排序使用的第二個元素在PHP

我有以下的文本文件:

roomA  Springer, Jerry [email protected] 
roomB  Cruise, Tom  [email protected] 
roomC  Jovi, Bon   [email protected] 

,我想對它進行排序姓所以輸出:

Cruise, Tom  roomB  [email protected] 
Jovi, Bon  roomC  [email protected] 
Springer, Jerry roomA  [email protected] 

我知道如何加載該文件:

$a = file("details.txt"); 

,並認爲我必須使用爆炸()來分割的數據(製表分隔):

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

這使得名稱的數組中的第二元件。

如何將字符串重新放在一起,姓名第一,然後是房間和電子郵件? 謝謝。

回答

2

做一個var_dump($array)它會顯示你的索引。然後你只需要互相交換兩個元素。這裏有一個竅門:

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

之後,像你一樣explode它,你可以implode結果:

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

希望這是有幫助的。好吧,爲了排序,看看array_multisort

0

PHP不是這份工作的最佳工具。

awk -F"\t" '{print $2"\t"$1"\t"$3}' infile | sort > outfile 
0

你的數據不是以已知的格式,我知道..的tabs以及它們之間space不是恆定的;

*不要在生產中不使用..我不得不砍圍繞*

我的方式嘗試

$note = "roomA  Springer, Jerry [email protected] 
roomB  Cruise, Tom  [email protected] 
roomC  Jovi, Bon   [email protected]"; 

$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 [email protected] 

    [1] => Jovi,Bon roomC [email protected] 

    [2] => Springer,Jerry roomA [email protected] 

) 

諮詢

使用standa RD格式suvh爲csvjsonxml

我會嘗試的preg_match

改進它
相關問題