2015-05-30 136 views
0

我有一個名爲$衝突的數組,其中包含數組中的數字。如何從數組中刪除重複的條目(已交換值)?

。因此$格式的衝突將是:

$clashes = [ 
    [ 
     "s1_id" => 26, 
     "s2_id" => 27 
    ], 
    //....... 
]; 

比方說,我的陣列看起來是這個數據填充之後:

$clashes = [ 
    [ 
     "s1_id" => 26, 
     "s2_id" => 27 
    ], 
    [ 
     "s1_id" => 27, 
     "s2_id" => 26 
    ], 
    [ 
     "s1_id" => 26, 
     "s2_id" => 27 
    ], 
    [ 
     "s1_id" => 27, 
     "s2_id" => 26 
    ] 
]; 

由於這些項目基本上是相同的,會是什麼是在數組中至少留下一個的同時刪除所有重複條目的最佳方法?

編輯:

示例輸出:

$clashes = [ 
    [ 
     "s1_id" => 26, 
     "s2_id" => 27 
    ] 
]; 
+0

我不明白你想做什麼。排序?檢查?刪除條目? – Federkun

+0

我想刪除包含相同值的條目,同時在數組中至少留下一個條目。 –

+0

你已經給出了一個示例輸入,你能給我們一個示例輸出嗎? – miah

回答

0

這裏的一個,而強力方法。它會檢查s1_ids2_id是否等於下一個陣列的s1_ids2_id

function fixYourArray($arr){ 
    for ($i=0; $i<count($arr)+1; $i++){ 
     if ($arr[$i]["s1_id"] == $arr[$i+1]["s1_id"]){ 
      array_pop($arr); 
     } 
     if ($arr[$i]["s2_id"] == $arr[$i+1]["s2_id"]){ 
      array_pop($arr); 
     } 
     if ($arr[$i]["s1_id"] == $arr[$i+1]["s2_id"]){ 
      array_pop($arr); 
     } 
     if ($arr[$i]["s2_id"] == $arr[$i+1]["s1_id"]){ 
      array_pop($arr); 
     } 
    } 
    // else just return 
    return $arr; 
} 

print_r($clashes); 
$clashes = fixYourArray($clashes); 
print('<br />'); 
print_r($clashes); 

我確定有一個更優雅的解決方案。

編輯:我刪除了有條件的回報。這現在應該適合你。

+0

謝謝,這工作得很好。我忘了所有關於array_pop()函數。 –

+0

嗨。不幸的是,這對我來說工作不正常。這是我的輸入數據:http://i.gyazo.com/3400afb78f620c1ed76d5cb40a67a826.png這是輸出的數據:http://i.gyazo.com/201748bd376e21a6c07bd0b6b5fccf1f.png。正如你所看到的,在我運行這個函數後,仍然有一些條目仍然在數組中。什麼可能導致這個問題? –

+0

我應該提到,輸入的數據不是永久性的,並且將根據用戶選擇的內容而改變。 –