1. 程式人生 > >PHP二維陣列去重的方法(保留各個鍵值的同時去除重複的項)-- 二維陣列的唯一性

PHP二維陣列去重的方法(保留各個鍵值的同時去除重複的項)-- 二維陣列的唯一性

對於如下二維陣列,要求對其進行去重:

$arr = array(
          '0'=>array(
                    'name'=>'james',
                    'age'=>30,
                    ),
          '1'=>array(
                    'name'=>'susu',
                    'age'=>26,
                    ),
          '2'=>array(
                    'name'=>'james',
                    'age'=>30,
                    ),
          'new'=>array(
                    'name'=>'kube',
                    'age'=>37,
                    ),
          'list'=>array(
                    'name'=>'kube',
                    'age'=>27,
                    ),
          );


1、 二維陣列內部的一維陣列中的值不能完全相同,刪除其中重複的項:

程式碼如下:

<?php
$arr = array(
          '0'=>array(
                   'name'=>'james',
                   'age'=>30,
                   ),
          '1'=>array(
                   'name'=>'susu',
                   'age'=>26,
                   ),
           '2'=>array(
                   'name'=>'james',
                   'age'=>30,
                   ),
           'new'=>array(
                   'name'=>'kube',
                   'age'=>37,
                   ),
           'list'=>array(
                   'name'=>'kube',
                   'age'=>27,
                   ),
           );
printf("Before tranform the array:<br>");   //輸出原來的陣列
print_r($arr);
echo "<br/>";
function more_array_unique($arr=array()){
    foreach($arr[0] as $k => $v){
        $arr_inner_key[]= $k;   //先把二維陣列中的內層陣列的鍵值記錄在在一維陣列中
    }
    foreach ($arras $k => $v){
        $v =join(",",$v);    //降維 用implode()也行
        $temp[$k] =$v;      //保留原來的鍵值 $temp[]即為不保留原來鍵值
    }
    printf("After split the array:<br>");
    print_r($temp);    //輸出拆分後的陣列
    echo"<br/>";
    $temp =array_unique($temp);    //去重:去掉重複的字串
    foreach ($tempas $k => $v){
        $a = explode(",",$v);   //拆分後的重組 如:Array( [0] => james [1] => 30 )
        $arr_after[$k]= array_combine($arr_inner_key,$a);  //將原來的鍵與值重新合併
    }
    //ksort($arr_after);//排序如需要:ksort對陣列進行排序(保留原鍵值key) ,sort為不保留key值
    return$arr_after;
}
    $arr_new = more_array_unique($arr);  //呼叫去重函式
    printf("Duplicate removal of the array:<br>");
    print_r($arr_new);
echo "<br/>";
?>


輸出結果:

Before tranform the array:   //原來陣列
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [2] => Array ( [name] => james [age]=> 30 ) [new] => Array ( [name] => kube [age] => 37 ) [list] =>Array ( [name] => kube [age] => 27 ) ) 
After split the array:  //

拆分後陣列
Array ( [0] => james,30 [1] => susu,26 [2] => james,30 [new] =>kube,37 [list] => kube,27 ) 
Duplicate removal of thearray:  //去重後陣列
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age]=> 37 ) [list] => Array ( [name] => kube [age] => 27 ) ) 

2、 二維陣列內部的一維陣列因某一個鍵值不能相同,刪除重複項:

/*針對某一個鍵值來進行去重*/

<?php
$arr= array(……);  //同上的二維陣列
functionsecond_array_unique_bykey($arr, $key){
    $tmp_arr = array();
    foreach($arr as $k => $v)
    {
        if(in_array($v[$key], $tmp_arr))   //搜尋$v[$key]是否在$tmp_arr陣列中存在,若存在返回true
        {
            unset($arr[$k]); //銷燬一個變數  如果$tmp_arr中已存在相同的值就刪除該值
        }
        else {
            $tmp_arr[$k] = $v[$key];  //將不同的值放在該陣列中儲存
        }
   }
   //ksort($arr); //ksort函式對陣列進行排序(保留原鍵值key)  sort為不保留key值
    return $arr;
   }
   $key ='name';
   $arr_key = second_array_unique_bykey($arr,$key);
   printf("As for the givenkey->%s:<br>",$key);
   print_r($arr_key);
   echo "<br/>";
?>


輸出結果:

As for the given key->name:
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ([name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age]=> 37 ) )