最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
php程序员面试之百度面试题
时间:2022-06-24 15:13:39 编辑:袖梨 来源:一聚教程网
据说是一个百度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;
}
相关文章
- NBA 2K25勒布朗詹姆斯捏脸数据一览 11-08
- 包饺子活动朋友圈文案 11-08
- NBA 2K25矮壮篮板怪PF建模推荐分享 11-08
- NBA 2K25专精锁防开荒建模推荐分享 11-08
- NBA 2K25超全能锁防build建模分享 11-08
- NBA 2K25高个子后卫建模推荐分享 11-08