あるものを降順に表示したいんですが、下記URLで調べると「ソートの基準」って欄に「値」「キー」
「キーと値の相関関係」って欄に「維持する(しない)」と書いてあるんですが、それぞれ何を指してるのか教えてもらえますか
リンク内容
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
PHPの場合、配列と連想配列の区別がなく、普通の配列は「連番の数字のキーに値が入った連想配列」という扱いになります。
ということで、普通の配列を中身でソートするときは、「値」でソートすることになります。そして、ソート後も単なる配列として扱いたいなら、キーは「維持しない」が適切です(「維持する」関数を使うと、「3, 2, 1, 0」というように、配列の添字と順番が無関係になった、扱いづらい配列が出来上がってしまいます)。
投稿2016/07/08 04:56
総合スコア145184
0
ベストアンサー
asort()
(維持する)とsort()
(維持しない)の結果を比較してみましょう。
PHP
1 2echo '<pre>'; 3$a = array( 4 0=>'banana', 5 1=>'orange', 6 2=>'apple', 7); 8 9var_dump($a); 10asort($a); 11var_dump($a); 12sort($a); 13var_dump($a); 14 15echo '</pre>';
# 結果 array(3) { [0]=> string(6) "banana" [1]=> string(6) "orange" [2]=> string(5) "apple" } array(3) { [2]=> string(5) "apple" [0]=> string(6) "banana" [1]=> string(6) "orange" } array(3) { [0]=> string(5) "apple" [1]=> string(6) "banana" [2]=> string(6) "orange" }
asort()の結果ではキー「2」に対して値「apple」の関係は維持されていますが、
sort()の結果ではその関係がなくなりキー「0」が値「apple」になっています。
投稿2016/07/08 05:04
総合スコア925
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
何をキーにソートをするか
id name hp 01 tako 240 02 ika. 200
このようにidとhpの組み合わせのゲームのセーブデータがあったとします。
hpをキーにソートをするときと、idをキーにソートをするときでは結果が違うのはわかりますか?
どこを使ってソートするか、というのがキーの意味です。
また、値の相互関係を保たないとidとhpが入れ替わってしまい、ゲームデータに異常が出てしまいます。
相互関係を保つと、すべての値をソート時に入れ替えるため多少処理が重くなるでしょう。
一長一短です。
匿名でHPランキングを出す、という時は相互関係を保たず
データを破壊したくない時は相互関係を保つといいでしょう
昇順
- キー=id/相互関係=維持
id=01,02 hp=240,200
- キー=hp/相互関係=維持
id=02,01 hp=200,240
- キー=id/相互関係=維持しない
id=01,02 hp=240,200
- キー=hp/相互関係=維持しない
id=01,02 hp=200,240
こんな感じになると思います。
投稿2016/07/08 05:01
総合スコア868
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。