递归方法 练习编写
需求:
给定一个多维数组,现在需要将数组中所有的键值key 和 对应的 value 值拼接成一段字符串,输出拼接后字符串的MD5值,具体细节如下
- 数组中的所有的字段和值,按照key1=value1;key2=value2.. 格式进行,拼接成字符串,并计算拼接后字符串的Md5值
- 要求所有的key为小写,并按照Key的字母升序拍讯
- 多维数组则以拼接key的值,例如 $a['a']['b'] = 'test', 则生成 a.b=test
- 例如上诉数组,最终生成的字符串为 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); ?>