递归算法学习

题目:写一个函数, 满足如下条件:

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

猜你喜欢

转载自www.cnblogs.com/huaerr/p/10558975.html