1. 程式人生 > >遞歸算法學習

遞歸算法學習

chang war count 學習 self function 遞歸算法 滿足 應用場景

題目:寫一個函數, 滿足如下條件:

$arr = [
    "Name"  => ‘test‘,
    "Data"  => [
            "Uid"   => 1,
            "Name"  => "eva",
            "Thread" => [
                "ID1"   => 22,
                "ID2"   => 33,
                ],
        ],
    "Title" => "get a string",
]; 

數組樣例如上,

(1)所有key小寫
(2)根據key 升序排列
(3)多維數組 $arr[‘abc‘][‘efg‘] = 1變成 abc.efg = 1
應用場景是什麽?

解答:

<?php
$arr = [
    "Name"  => ‘test‘,
   "Data"  => [
            "Uid"   => 1,
            "Name"  => "eva",
            "Thread" => [
                "ID1"   => 22,
                "ID2"   => 33,
                ]
, ], "Title" => "get a string", ]; $testobj = new test(); $testobj->lower($arr); $prefix = ""; $newArr = []; $testobj->getPrefix($arr,$prefix,$newArr); ksort($newArr); $finalStr = ""; foreach ($newArr as $key=>$value){ $finalStr .= $key."=".$value."&"; }
var_dump(rtrim($finalStr,"&")); class test{ function getPrefix($arr,&$prefix,&$newArr){ foreach ($arr as $key=>$value){ if(is_array($value)){ $prefix .=$key."."; self::getPrefix($value,$prefix,$newArr); $prefix = ""; }else{ $newArr[$prefix.$key]=$value; } } } function lower(&$arr){ $arr = array_change_key_case($arr); foreach ($arr as $key=>&$value){ if(is_array($value)){ self::lower($value); } } } } ?>

題目:用戶充值優惠計算方法:

解答:

<?php
    var_dump(discountAmount(800));
    //$amount 為原價
    function discountAmount($amount){
    //價格 => 折扣
$arr = [ 10 =>1000,   100=> 999, 200=>998, 300=>997, 400=>996, 500=>995, 600=>994, 700=> 993, 800=> 992, 900=>991, 1000=> 990, 10000=> 989, 50000=>988, 500000=> 987, ]; krsort($arr); foreach ($arr as $min=>$discount){ if($amount>=$min){ return $dicountAmount = $amount * $discount /1000; } } } ?>

遞歸算法學習