0

だから私は次の配列を持っています: http://pastebin.com/raw.php?i=AazcQUbG

以下の関数の外側のコードの一部で、この特定の順序付き配列 (2 番目の次元の「team_points」で順序付け) をループし、「team_points」に同点があるかどうかを判断します。team_points で同点の場合は、それぞれの tie_breaker を確認します。

同点が存在し、最初の次元の 2 番目のアイテムの tie_breaker が最初のアイテムよりも小さい場合、最初の次元の順序の切り替えが行われるようにします。

次の関数は切り替えを強制していません。この配列の最初の次元の位置を切り替えることができない理由を理解し、それを達成する方法を提案してもらえますか?

function array_swap($key1, $key2, $array) {
  $newArray = array ();
  foreach ($array as $key => $value) {
    if ($key == $key1) {
      $newArray[$key2] = $array[$key2];
    } elseif ($key == $key2) {
      $newArray[$key1] = $array[$key1];
    } else {
      $newArray[$key] = $value;
    }
  }
  return $newArray;
}
4

1 に答える 1

0

これはうまくいくと思います:

編集:この関数は、並べ替えフィールドを $key1 および $key2 として使用して、データ セット全体に対して実行することを意図しています。

function array_swap($key1, $key2, $array) {
  $newArray = array ();

  // I chose a for loop because each iteration deals with two elements
  for ($i = 1; $i < count($array); $i++) { 
    if ($array[$i][$key1] == $array[$i - 1][$key1]){
      if ($array[$i][$key2] < $array[$i - 1][$key2]) { //money-condition
        $newArray[$i - 1] = $array[$i];
        $newArray[$i]     = $array[$i - 1];
        $i++
      } else {
        $newArray[$i - 1] = $array[$i - 1];
      }
    } else {
      $newArray[$i - 1] = $array[$i - 1];
    }
  }

  // there is special condition if that last two elements are flipped
  // and $i was incremented, in which this last step won't be required
  if ($i < count($array)){
    $newArray[$i] = $array[$i];
  }
  return $newArray;
}
于 2012-10-26T03:23:34.173 に答える