2

私のウェブサイトで投票があります。そのために、結果を次のような配列に入れます。

[Answer1] => "0",
[Answer2] => "1",
[Answer3] => "0",
[Answer4] => "0"

選択が鍵であり、投票数が価値です。基本的に、結果が表示されたら、投票数で並べ替えてから、同じ並べ替えを維持したいと考えています。したがって、投票がない場合は、次の順序で表示されます。

Answer1
Answer2
Answer3
Answer4

しかし、「Answer2」が 1 票の場合、次のように表示されます。

Answer2
Answer1
Answer3
Answer4

カスタム usort 関数を作成しようとしましたが、運がありません。
誰かがそれを行う方法を教えてくれますか?

4

4 に答える 4

2

連想配列を使用しているため、探しているものは安定ソートと呼ばれます。PHP の標準配列ソート関数は、クイックソートの不安定な実装を使用しているため、ここでは役に立ちません。

を使用してこれを実現できますarray_multisortvaluekeyの両方でソートする。

現在のデータ構造では、u*sort 関数ではこれを行うことができませんでしたが、データ構造を変更して別の次元を追加すると、次のようになります。

array( 
  array( 
    'answer' => 1, 
    'votes' => 0, 
  ), 
  array( 
    'answer' => 2, 
    'votes' => 1, 
  ), 
) 

したがって、基本的に、比較関数は両方のサブインデックスを考慮する必要があります。

それが役立つことを願っています

于 2013-02-18T12:49:09.773 に答える
1

PHP関数「asort」が必要です:

http://uk.php.net/manual/en/function.asort.php

インデックスの関連付けを維持しながら、配列をソートします。

標準配列 (非連想) を使用していることに気付きました。インデックスの関連付けを保持することにこだわらない場合は、sort( ) を使用してください。

http://uk.php.net/manual/en/function.sort.php

于 2013-02-18T12:48:37.857 に答える
-1

質問を読み間違えたようです。

asort() は配列を値でソートするため、最高の投票が配列の最初になります。したがって、結果は次のようになります。

[Answer2] => "1",
[Answer1] => "0",
[Answer3] => "0",
[Answer4] => "0"

またはさらに完全な例

[Answer2] => "42",
[Answer3] => "29",
[Answer1] => "18",
[Answer4] => "9"

于 2013-02-18T12:52:55.343 に答える
-1

私は asort() がうまくいくと思います..

asort($your_array);
于 2013-02-18T12:54:04.183 に答える