递归方法 练习编写

需求:

给定一个多维数组,现在需要将数组中所有的键值key 和 对应的 value 值拼接成一段字符串,输出拼接后字符串的MD5值,具体细节如下

  1. 数组中的所有的字段和值,按照key1=value1;key2=value2.. 格式进行,拼接成字符串,并计算拼接后字符串的Md5值
  2. 要求所有的key为小写,并按照Key的字母升序拍讯
  3. 多维数组则以拼接key的值,例如 $a['a']['b'] = 'test', 则生成 a.b=test
  4. 例如上诉数组,最终生成的字符串为 data.data=2021;data.list.di2=321;data.list.id1=123;data.title=testtitle;name=testname;page=100

其他这是考一个递归函数应用,所以重点就是回调函数如何去写

<?php 
    $array = [
        'Name' => 'testname',
        'Data' => [
            'title' => 'testtitle',
            'data' => '2021',
            'list' => [
                'id1' => '123',
                'Di2' => '321'
            ],
        ],
        'Page' => 100,
    ];

    function arrayDeal($data, $pkey='') {
        if( !is_array($data) ) {
            return $data;
        }

        foreach ($data as $key => $val) {
            if( is_array($val) ) {
                foreach ($val as $k => $v) {
                    $newKey = strtolower($key.'.'.$k);
                    if( is_array($v) ) {
                        $newData = arrayDeal($v, $newKey);
                        foreach ($newData as $kk => $vv) {
                            $data[$kk] = $vv;
                        }
                    } else {
                        $data[$newKey] = $v;    
                    }
                }
            } else {
                if( !empty($pkey) ) {
                    $newKey = strtolower($pkey.'.'.$key);
                } else {
                    $newKey = strtolower($key);
                }
                $data[$newKey] = $val;
            }
            unset($data[$key]);
        }
        return $data;
    }

    $newData = arrayDeal($array);
    ksort($newData);

    $str = '';
    foreach ($newData as $kk => $vv) {
        $str .= ($kk.'='.$vv.';');
    }

    $str = substr($str, 0, -1);
    echo md5($str);

 ?>
原文地址:https://www.cnblogs.com/fangdada/p/14817564.html