去掉二維數組中的重複的群組合的實現代碼

來源:互聯網
上載者:User
要求將二維數組中組合形式重複的鍵和值去掉,比如array( array(‘a’ => ‘b’), array(‘b’ => ‘a’) ); 為相同組合, 只保留array(‘a’ => ‘b’)。

注意組合與排列是不同的,(a,b)和(b,a)是相同的組合,但是它們是不同的排列。

小技巧:1、將二維數群組轉換為一維數組,具體是把二維數組的鍵和值進行組合,全部儲存在一維數組中,如array(‘a’ => ‘b’),我們將鍵和值轉換成形如a-b的字串然後,儲存在一維數組中,加’-'是為了後面的比較時,可以還原原來的索引值對。

2、轉換之後,先把重複的字串去掉,在樣本中是’b-d’,它重複了2次,去掉一個。再進行比較。我們的比較思路是這樣的,如儲存在一維數組中的索引值字串’a-b’,我們將它在轉換成’b-a’,然後在一維數組中進行搜尋,如果數組中不存在形如’b-a’的字串,那麼說明’a-b’沒有重複的組合,然後將’a-b’拆分,按初始數組的形式儲存到二維數組中;如果數組中存在形如’b-a’的字串,並且位於’a-b’字串之後,那麼,說明‘a-b’字串存在重複的組合,但是我們仍然將其拆分然後儲存在二維數組中。這是因為,重複的組合’b-a’位於’a-b’之後,當我們迴圈處理到字串’b-a’時,會得到字串’b-a’也存在重複的字串組合’a-b’,但是’a-b’再’b-a’之前,我們已經儲存過了,因此’b-a’便不再儲存,這樣也就達到了去掉重複的群組合的目的。對於重複字串的位置的比較,是通過它在一維數組中對應的鍵名來進行的。

完整代碼:

 ‘b’),array(‘a’ => ‘c’),array(‘a’ => ‘d’),array(‘b’ => ‘a’),array(‘b’ => ‘c’),array(‘b’ => ‘d’),array(‘b’ => ‘d’),array(‘c’ => ‘a’),array(‘d’ => ‘a’),array(‘d’ => ‘e’));//迴圈二維數組,得到一維數組foreach($array as $key=>$value){foreach($value as $key2=>$value2){$new[]=$key2.’-’.$value2;}}//去掉一維數組中的重複項$new=array_unique($new);//迴圈一維數組foreach($new as $key=>$value){$varr=explode(‘-’,$value);//拆分字串$nval=$varr[1].’-’.$varr[0];//重組字串$skey=array_search($nval,$new);//在數組中搜尋,字串,如果有返回鍵名,沒有返回false//注意這裡對flase的比較一定要用===,而不能用==,因為特殊的鍵0,如果用==比較的話也會被認為是falseif($skey===false||$skey>$key){//如果沒有重複的群組合或者重複的群組合在當前組合之後$res[][$varr[0]]=$varr[1];//按初始數組的索引值對,重新儲存}}//列印最後的結果print_r($res);?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.