ソートについて - PHPプロ!Q&A掲示板

2817

  • 0P

ソートについて

質問日時 / 2010年7月20日 04:04    回答数 / 5件

Questioner:  agupx  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

佐々木 24
工藤 28
田中 20

上記のようなテキストファイルがあります。並びは上から登録順です。
表示する際に新着順に表示させたく下記のようにしました。

  1. $inarray = file('test.text');
  2. $array = array_reverse($inarray);
  3. foreach ($array as $key => $line) {
  4.     $id = $key;
  5.     list($name, $age) = explode(' ', trim($line));
  6.     echo $name . $age;
  7.     echo '<a href="?id=' . $id . '">'編集</a>';

この状態だと配列のインデックスはそのままなので$idは降順になりません。

単純にテキストファイルにidも付けてしまえば済む話ではあるのですが
テキストファイルの編集もする予定なのでidは配列のインデックスで
済ませたいと思っております。

(編集する場合、配列を作り直し新たに書きこみしなければならないようでその際にidも修正が必要だと面倒かと・・・)

希望としては下記の並びで表示させたいのですがどうすればいいでしょうか?
※()の数字はidです

田中 20 (3)
工藤 28 (2)
佐々木 24 (1)

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01magicflute21.ループをwhileに変更する。 2.$inarray[全行数
┣A02signal$inarray を array_reverse する前に id の情報をつけ
┣A03yuu_a0$array = array_reverse($inarray, true); 読み込
┗A04shimixキーを保持したまま逆順に並べるのはyuu_a0さんがご指
 ┗A04-1agupx詳しいご説明ありがとうございます。 foreach前を下

回答一覧

並び替え:

A01
answerermagicflute2 [7月20日 06:20]

1.ループをwhileに変更する。
2.$inarray[全行数-1]から表示する。
3.配列のインデックスをマイナスしていく。

この意見に回答する

ツリーへ TOPへ

A02
answerersignal [7月20日 06:21]

$inarray を array_reverse する前に id の情報をつけておけばよいでしょう

この意見に回答する

ツリーへ TOPへ

A03
answereryuu_a0 [7月21日 04:27] (最終編集:7月21日 06:23)

$array = array_reverse($inarray, true);

読み込みながら逆順に出力、、、 、、、は、めんどくさいか。

この意見に回答する

ツリーへ TOPへ

A04
answerershimix [7月21日 11:02] (最終編集:7月21日 11:03)

キーを保持したまま逆順に並べるのはyuu_a0さんがご指摘のようにarray_reverseの第二引数で指定できます。第二引数がない場合には(defaultがfalseなので)「配列のインデックスはそのままなので」ではなく、付け替えられてしまっているということです。マニュアルを読みましょう。

  http://www.php.net/manual/ja/function.array-reverse.php


以下、重箱の隅ですが・・

>田中 20 (3)
>工藤 28 (2)
>佐々木 24 (1)

(元のキーを保持していて)こう表示したいのであれば

>$id = $key;

file()で読み込んだ配列はゼロベースになっているので、$id = $key + 1; にしないとマズイです。

この意見に回答する

ツリーへ TOPへ

A04-1
replyeragupx [7月21日 11:17]

詳しいご説明ありがとうございます。
foreach前を下記のように変更し
  1. $array = array_reverse($inarray, true);
foreach内のidの取得を下記に変更したところ思い通りに表示されました。
  1. $id = $key + 1;
これにて解決とさせていただきます。皆様ありがとうございました!

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)