| 要求將二維數組中組合形式重複的鍵和值去掉,比如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);?> |