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

これにより、名前が配列の2番目の要素になります。

名前を最初に付け、次に部屋と電子メールを付けて文字列を元に戻すにはどうすればよいですか?ありがとう。

4

3 に答える 3

2

var_dump($array)を実行すると、インデックスが表示されます。次に、2つの要素を相互に交換するだけで済みます。ここにトリックがあります:

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をcsvjsonまたはとして使用しますxml

preg_matchで改善してみます

于 2012-04-15T23:14:20.437 に答える