1

私は Fabio Masino で、イタリア人なので、私の英語は完璧ではないかもしれません。

サッカーのグループ分けの方法を実現したい

  • ポイント別(数字で降順にソート)、
  • 次に、得点したゴール (数字で降順にソート)、
  • 次に名前順 (文字列として昇順でソート)。

たとえば、次の多次元配列がある場合:

$group=array(
       array("Juve", 15, 45), // the values are name, points and goals scored
       array("Inter", 21, 40),
       array("Milan", 15, 50)
      );

私はこの結果を望んでいます:

 $group=array(
           array("Inter", 21, 40),
           array("Milan", 15, 50),
           array("Juve", 15, 45)
          );

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

4

4 に答える 4

2

Points は各サブ配列の 2 番目の要素ですよね? だったらこうしよう

function CustomSort($a, $b)
{
    return $a[1] < $b[1] ? -1 : 1;
}

usort($group, 'CustomSort');

名前や目標などの他の基準に注目したい場合は、数値配列インデックスを各サブ配列の各基準を表す数値に変更するだけです。たとえば、名前の並べ替えは次のようになります

function NameSort($a, $b)
{
    return $a[0] > $b[0] ? -1 : 1;
}
于 2013-09-24T10:44:20.403 に答える
1
$group = array(
    array("Juve", 15, 45), // the values are name, points and goals scored
    array("Inter", 21, 40),
    array("Milan", 15, 50)
);

usort(
    $group,
    function($a, $b) {
        if ($a[1] == $b[1]) {
            if ($a[2] == $b[2]) {
                return ($a[0] < $b[0]) ? -1 : 1;  // by team name (ascending)
            }
            return ($a[2] < $b[2]) ? 1 : -1;  // by goals scored (descending)
        }
        return ($a[1] < $b[1]) ? 1 : -1;  // by points (descending)
    }
);

var_dump($group);
于 2013-09-24T10:44:07.547 に答える
0

ソート機能 :

カスタム関数を使用して、機能しているソリューションを実現します

   function multisort (&$array, $key) {
$valsort=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
    $valsort[$ii]=$va[$key];
}
asort($valsort);
foreach ($valsort as $ii => $va) {
    $ret[$ii]=$array[$ii];
}
$array=$ret;
}

multisort($multiarr,"order");

これが確実に役立つことを願っています。

于 2013-09-24T10:42:15.710 に答える