Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Deduplizierung mehrdimensionaler Arrays (Deduplizierung für jeden Schlüsselwert) – Eindeutigkeit des zweidimensionalen Arrays – Zeitkomplexität ~Ein

PHP-Deduplizierung mehrdimensionaler Arrays (Deduplizierung für jeden Schlüsselwert) – Eindeutigkeit des zweidimensionalen Arrays – Zeitkomplexität ~Ein

WBOY
WBOYOriginal
2016-07-29 09:15:041108Durchsuche

Nehmen Sie ein zweidimensionales Array als Beispiel, um die Deduplizierung eines beliebigen Schlüsselwerts zu veranschaulichen. Die zeitliche Komplexität beträgt ~O(n), wobei nur eine foreach-Schleife verwendet wird:

<?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/>";

?>

Ausgabeergebnis:

Was den willkürlichen Schlüssel betrifft:
Array ( [0] => Array ( [name] => james [ Alter ] => 30 ) [1] => Array ( [Name] => susu [Alter] => 26 ) [neu] => Array ( [Name] => kube [Alter] => ; 37 ) [list] => Array ( [name] => kube [age] => 27 ) )

Entwicklungsbeispiel: Coupon-Deduplizierung (mit Rabattbetrag-BestellbetragDie Felder können nicht wiederholt werden Duplikate entfernen)

Anforderung: Für Gutscheine mit gleichem Rabattbetrag und Bestellbetrag muss dem Benutzer nur ein Gutschein zur Auswahl angezeigt werden, und Es wird diejenige angezeigt, die am schnellsten abläuft. Diese:

<?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);
?>

Ausgabeergebnis:

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

Das Obige stellt die Deduplizierung mehrdimensionaler Arrays in PHP vor (Deduplizierung für jeden Schlüsselwert) – das einzige, was zweidimensionale Arrays betrifft – Zeitkomplexität ~ Ich hoffe, dass Freunde, die sich für PHP-Tutorials interessieren, dies auch tun werden Habe es geholfen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn