最近遇到一个面试题循环多维数组,最后按规定格式输出。面试的时候写得有点瑕疵,回来后自己上机跑了下。巩固递归算法,顺便再透彻的理解static 关键字 随机多维数组如下:
$arr = [
'Username' => 'test',
'data' => [
'title' => 'aaa',
'list' => [
'name' => 'bbb',
'time' => '222',
'time' => 111111111,
'tag' => 'abc1234',
规定输出格式如下:
Username=test;data.list.name=bbb;data.list.time=222;data.time=111111111;data.title=aaa;tag=abc1234;
上机代码如下:
function getKeyString($a,$ar=[]){
ksort($a);
if(!is_array($a)) return $a;
static $arr_key;
static $str;
foreach($a as $k => $v) {
if(is_array($v)) {
$arr_key[] = $k;
getKeyString($v, $arr_key);
} else {
if(empty($ar)) {
$str .= "$k=$v;";
} else {
$prefix = implode('.', $ar);
$str .= $prefix . '.' . "$k=$v;";
$arr_len = count($ar);
unset($ar[$arr_len-1]);
return $str;
$s = getKeyString($arr);
var_dump($s);
使用了static 关键字,当递归函数执行时,str和arr_key的值都没有因函数调用完而丢失。
static的定义:静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。
所以静态变量也提供了一种处理递归函数的方法。