でレーサー/選手を並べ替え:私は、次の形式で提示いくつかのレーサーに関するデータを持っている場所
array( array(name => "the first racer", places => [1,3,1,5,6,2,6,7,8]), array(name => "the second racer", places => [2,4,2,5,7]) ... )
は、最初のレーサーがより良い場所を持っている人だったようにそれらを並べ替えるための最良の方法を助言します。たとえば、最初のレーサーが少なくとも1つの第1の場所を持ち、もう1つのレーサーがない場合、最初のレーサーはリストの上位です。彼らの両方が最初の場所を持っている場合は、最初の場所の数を比較してください。数字が等しい場合は、2番目の場所などを比較してください。
私のソリューション(これは非常にエレガントに見えないかもしれない、それは何らかの形で容易に行うことができます。):
$racers = array( array('name' => "the first racer", 'places' => [1,3,1,5,6,2,6,7,8,9]), array('name' => "the second racer", 'places' => [1,3,1,5,6,2,6,7,8]), array('name' => "the third racer", 'places' => [2,3,2,5,7,10]), array('name' => "the fourth racer", 'places' => [2,3,10,6,6,10]), array('name' => "the fifth", 'places' => [2,3,2,5,7,10,1]), ); usort($racers, function($prev, $next) { // order places for every racer sort($prev['places']); sort($next['places']); //compare each place with each other foreach ($prev['places'] AS $key => $prevRacerPlace) { // if all values are equal, we compare the number of races if (!isset($next['places'][$key])) { return -1; } $nextRacerPlace = $next['places'][$key]; $diff = $prevRacerPlace - $nextRacerPlace; if ($diff !== 0) { return $diff; } } // if all values are equal, we compare the number of races if (count($next['places']) > count($prev['places'])) { return 1; } }); var_dump($racers);
.. – Darren
@Darrenをソートすることにより、各レーサーのためにあったか多くの場所を定義し、私はしようとしましたが、私のバージョンは好きではありません。非常に面倒です。私は説明に加えました。 – GrayRF
[** this for .. **](https://www.tehplayground.com/AaivOksiMojdpjAf) – Darren