MySQL PHPの質問です。


kyori[]
name[]
という2つの配列があります。データは入っている状態です。
kyori[]の小さい順にソートしてTOP3を抜き出し、それに対応するname[]を表示させたいです。

つまり
kyori[2]
kyori[20]
kyori[5]
の順にソートされた場合、
name[2]
name[20]
name[5]
を表示させたいのです。

このようなPHPスクリプトを教えてください。
MySQLへの接続スクリプトは省略して頂いて結構です。

よろしくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:2007/03/10 19:27:32
  • 終了:2007/03/10 23:54:35

ベストアンサー

id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542007/03/10 22:52:54

ポイント41pt

http://jp2.php.net/manual/ja/function.asort.php

asortを使えば連想キーと要素との関係を維持しつつ配列をソートするそうで。

$kyori = array(50, 50,1,60,70,3,10,10,10,10,10,10,11,11,11,11,11,11,11,11,4);
asort($kyori);
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";

後は$name[$key]のようにすれば取り出せます。

$top = array_slice(array_keys($kyori),0,3);
foreach ($top as $key)
  echo $key."\n";

array_keys()でキーだけを取り出し、array_slice()で更にTOP3を取り出したほうがスマートかも。PHP5.0.2以降であればarray_slice()でpreserve_keysをTRUEにする事でキーを温存できるようでarray_keys()しなくても希望の値は取り出せると思います。

id:tokyosmash

具体的で助かります!

ありがとうございました。

2007/03/10 23:54:02

その他の回答(2件)

id:amagami No.1

amagami回答回数53ベストアンサー獲得回数02007/03/10 20:35:52

ポイント19pt

こんな感じでしょうか(divタグは全角で括っています)


$kyori = Array(100, 1, 2, 5, 15);

$name = Array('No.100', 'No.1', 'No.2', 'No.5', 'No.15');

asort($kyori, SORT_NUMERIC);

$cnt = 0;

foreach ($kyori as $i => $value) {

echo "<div>{$name[$i]}</div>\n";

if ($cnt++ == 2) break;

}

?>

id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542007/03/10 22:52:54ここでベストアンサー

ポイント41pt

http://jp2.php.net/manual/ja/function.asort.php

asortを使えば連想キーと要素との関係を維持しつつ配列をソートするそうで。

$kyori = array(50, 50,1,60,70,3,10,10,10,10,10,10,11,11,11,11,11,11,11,11,4);
asort($kyori);
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";
list($key, $value) = each($kyori);
echo $key.">>".$value."\n";

後は$name[$key]のようにすれば取り出せます。

$top = array_slice(array_keys($kyori),0,3);
foreach ($top as $key)
  echo $key."\n";

array_keys()でキーだけを取り出し、array_slice()で更にTOP3を取り出したほうがスマートかも。PHP5.0.2以降であればarray_slice()でpreserve_keysをTRUEにする事でキーを温存できるようでarray_keys()しなくても希望の値は取り出せると思います。

id:tokyosmash

具体的で助かります!

ありがとうございました。

2007/03/10 23:54:02
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912007/03/10 22:58:50

ポイント20pt

PHP の次の関数が使えると思います。

mysql_fetch_assoc

array_multisort


サンプルを組み合わせただけですが、こんな感じになるでしょうか。

SQL 部分は実際のものに修正してみてください。

    $sql = "SELECT kyori, name FROM  sometable WHERE  somecondition = 1";
    $result = mysql_query($sql);

// データ行が存在する間、それを $data に連想配列形式でセットする
    while ($row = mysql_fetch_assoc($result)) {
       $data[] = array( 'kyori'=> $row["kyori"], 'name'=> $row["name"] );
    }

// 列方向の配列を得る
    foreach ($data as $key => $row) {
        $kyori[$key] = $row['kyori'];
        $name[$key]  = $row['name'];
    }

// データを kyori の昇順、name の降順にソートする
    array_multisort($kyori, SORT_ASC, $name, SORT_DESC, $data);

// 結果の表示
    print "    NAME KYORI<br>\n";
    for( $i=1 ; $i<=3 ; $i++ ) {
        print "$i    {$kyori[$i-1]}    {$name[$i-1]}<br>\n";
    }

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません