在多维数组的第一维中交换位置

时间:2012-10-26 02:40:04

标签: php function multidimensional-array associative

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

在下面函数之外的代码的一部分中,我循环遍历这个特定的有序数组(按第二个维度排序' team_points')并确定&#中是否存在平局39; team_points&#39 ;.如果确定了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;
}

1 个答案:

答案 0 :(得分: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;
}