> 백엔드 개발 > PHP 튜토리얼 > PHP 다차원 배열 중복 제거(모든 키 값에 대한 중복 제거) - 2차원 배열의 고유성 - 시간 복잡도 ~On

PHP 다차원 배열 중복 제거(모든 키 값에 대한 중복 제거) - 2차원 배열의 고유성 - 시간 복잡도 ~On

WBOY
풀어 주다: 2016-07-29 09:15:04
원래의
1125명이 탐색했습니다.

키 값의 중복 제거를 설명하기 위해 2차원 배열을 예로 들어 보겠습니다. 시간 복잡도는 ~O(n)이며 단 하나의 foreach 루프:

<?php 
$arr = array(
                     &#39;0&#39;=>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,
                              ),
                    );
 /*针对任意键值来进行去重*/
               function getArrayUniqueByKeys($arr)
               {
                   $arr_out =array();
                   foreach($arr as $k => $v)
                   {
                        $key_out = $v['name']."-".$v['age']; //提取内部一维数组的key(name age)作为外部数组的键

                        if(array_key_exists($key_out,$arr_out)){
                            continue;
                        }
                        else{
                             $arr_out[$key_out] = $arr[$k]; //以key_out作为外部数组的键
                             $arr_wish[$k] = $arr[$k];  //实现二维数组唯一性
                        }
                   }
                   return $arr_wish;
               }
               $arr_wish = getArrayUniqueByKeys($arr);
               printf("As for the arbitrarily key:<br>");
               print_r($arr_wish);
               echo "<br/>";

?>
로그인 후 복사

출력 결과:

임의 키의 경우:
Array ( [0] => Array ( [이름] => james [ age ] => 30 ) [1] => Array ( [이름] => susu [나이] => 26 ) [new] => Array ( [이름] => kube [나이] => ; 37 ) [list] => Array ( [이름] => kube [age] => 27 ) )

개발 예시: 쿠폰 중복 제거( 할인금액-주문금액 중복입력이 불가능합니다 중복 제거)

요구 사항: 동일한 할인 금액과 주문 금액의 쿠폰의 경우 사용자가 선택할 수 있도록 하나의 쿠폰만 표시되어야 하며, 가장 빨리 만료되는 항목이 표시됩니다. 해당 항목:

<?php
       $arrCoupon = array(
            &#39;0&#39;=>array(
                'couponCode' => '3033323852301056',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440798100",
                'couponAmount'  =>100,
                'orderAmount'=> 800,
                ),
            '1'=>array(
                'couponCode' => '3033323852301057',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440768100",
                'couponAmount'  =>100,
                'orderAmount'=> 800,
            ),
            '2'=>array(
                'couponCode' => '3033323852301058',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440788100",
                'couponAmount'  =>100,
                'orderAmount'=> 800,
            ),
            '3'=>array(
                'couponCode' => '3033323852301059',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440779100",
                'couponAmount'  =>200,
                'orderAmount'=> 800,
            ),
            '4'=>array(
                'couponCode' => '3033323852301060',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440758100",
                'couponAmount'  =>200,
                'orderAmount'=> 800,
            ),
            '5'=>array(
                'couponCode' => '3033323852301061',
                'usableStartTime' => "1439740800",
                'usableEndTime'=>"1440798100",
                'couponAmount'  =>200,
                'orderAmount'=> 800,
            ),
        );
        //print_r($arrCoupon);
        function getArrayUniqueByKey($arr)
        {
        $arrWish = array();
        $today = time();
        foreach ($arr as $k => $v) {
            if (($v['usableStartTime'] <= $today) && ($today <= $v[&#39;usableEndTime&#39;])) { //先确定优惠券的可用日期
                $keyOut = $v[&#39;couponAmount&#39;] . "-" . $v[&#39;orderAmount&#39;]; 
                //提取内部一维数组的key(couponAmount orderAmount)作为外部数组的键
                if (array_key_exists($keyOut, $arrWish)) {
                    //展现最先到期的优惠券
                    if (intval($arrWish[$keyOut][&#39;usableEndTime&#39;]) > intval($v['usableEndTime'])) {
                        $arrWish[$keyOut] = $v;  //如果原来数组中结束时间大的话,就交换值
                    }
                    continue;
                }
                $arrWish[$keyOut] = $v;  //实现二维数组唯一性
            }
            continue;
        }
        return $arrWish;
        }
        $arrWant = getArrayUniqueByKey($arrCoupon);
        print_r($arrWant);
?>
로그인 후 복사

출력 결과:

Array( [

100-800] => ;Array ( [couponCode] => ; 3033323852301057 [usableStartTime] => 1439740800 [usableEndTime] => 1440768100 [couponAmount] => 100 [orderAmount] =>800 ) [200-800] => 배열( [couponCode] => 3033323852301060 [usableStartTime] =>1439740800 [usableEndTime] => 1440758100 [couponAmount] => 200 [orderAmount]=> 800 ) )

위에서는 PHP의 다차원 배열 중복 제거(모든 키 값에 대한 중복 제거)를 소개합니다. - 2차원 배열에 대한 유일한 것 - 시간 복잡도 ~ 내용 측면을 포함하여 PHP 튜토리얼에 관심이 있는 친구들이 있기를 바랍니다. 도움이 되었습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿