据说是一个百度php的面试题,已给定一个数组:
$arr = array(‘b’=>’a’, ‘c’=>’a’, ‘e’=>’b’, ‘d’=>’b’, ‘f’=>’c’, ‘g’=>’e’, ‘h’=>’f’);
写一个算法,完成到以下格式的转换:
array ( 'a' => array ( 'b' => array ( 'e' => array ( [0] => 'g', ), [0] => 'd', ), 'c' => array ( 'f' => array ( [0] => 'h', ), ), ), )
这个结构应该属于一种Trie树。当时在写的时候由于没发现array_keys()函数第二个参数(汗一个先),于是写了以下这个方法来实现。
function getsomething(&$arr, &$re, $c='') { $c or $c=array_shift(array_keys($arr));//当未指定开始位置时 从数组第一个元素开始 $flag= false; //标记 当有和$c对应的key(键)时 设为true while($k = array_search($c, $arr)) { //循环获取值为$c的key。 getsomething($arr, $re[$c], $k); //一直递归到最后没有key对应时 unset($arr[$k]); //移除 这个元素已经不会再使用了 $flag = true; } //当flag为真时 说明之前获得过正常存在的key,不会继续生成[0]下标的元素 if(! $flag) return $re[] = $c; } //调用 getsomething($arr, $re, 'a');
虽然有点儿奇葩,至少还是实现了。以下是某网友使用array_keys()的另一解法:
function _array_keys($k, $arr) { $return = array(); if($ret = array_keys($arr, $k)) { foreach($ret as $v) { if($t = _array_keys($v, $arr)) { $return[$v] = $t; } else { $return[] = $v; } } } return $return; }
荒野乱斗国际版 (BrawlStars)最新版本v56.274
下载一波超人内置修改器菜单版 安卓版v1.0.2
下载敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载继承了一座戏园子无限声望铜钱版 内置菜单最新版v1.7
继承了一座戏园子折相思版是游戏的破解版本,在该版本中为玩家提
山河半世橙光清软金手指版 无限鲜花v3.24
山河半世是一款超级好玩的橙光恋爱游戏,在游戏中玩家们需要扮演
蓬莱手游折相思版 安卓版v1.0.0
蓬莱免广告版是游戏的修改版本,在该版本中为玩家去除了广告,玩
当红影后橙光游戏破解版2025 最新版v1.0
当红影后橙光破解版是一款超级好玩的娱乐圈题材的橙光游戏,在这
忽然成了万人迷清软完结版 无限鲜花版v12.15
忽然成了万人迷破解版是一款非常好玩的男性向橙光游戏,在有一天