递归方法 练习编写

需求:

 

 

给定一个多维数组,现在需要将数组中所有的键值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);

 ?>
复制代码

 

posted @   方达达  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示