2012-10-26 127 views
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; 
} 
+0

您不會比較任何點的值。如果他們處於一種相對狀態或者另一種狀態,他們怎麼能夠切換?我將嘗試輸入另一種方法。 –

+0

我在函數外部的代碼中這樣做。我會把它放在原來的文章中。 – user1645914

+0

是否會發生兩個以上的團隊共享相同的'team_points'? – air4x

回答

0

我認爲這可能工作得更好:

編輯:此功能是爲了在您的整個數據集運行,使用您的排序字段爲$鍵1和$鍵2

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; 
} 
+0

我非常欣賞這種努力,但這不是我所期待的。最重要的是,這個函數不是按原樣工作並返回空數組。 – user1645914

+0

@ user1645914我認爲你應該發佈你如何使用該功能。就像我上面評論的那樣,我不明白你的函數如何比較任何東西。如果我的功能不起作用,我想看看你給它的輸入是什麼,導致它失敗。 –