0

所以我有以下数组:http ://pastebin.com/raw.php?i=AazcQUbG

在下面函数之外的部分代码中,我循环遍历这个特定的有序数组(按第二维的“team_points”排序)并确定“team_points”中是否存在平局。如果确定 team_points 的平局,我检查每个的 tie_breaker。

如果存在平局并且第一维中第二项的 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 回答