当前位置: 博客首页 >> 片言碎语 >> 阅读正文

【PHP】一个百度面试题?

作者: 郑晓 分类: 片言碎语 发布于: 2015-07-03 13:34 浏览:9,626 评论(7)


据说是一个百度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; }

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/baidu-php-mianshiti.html

【PHP】一个百度面试题?:目前有7 条留言

用户评论头像 三叔发表于 2017年07月20日 17:39[回复]

结合博主的两种方法写了一个
function array_change(&$arr, &$res, $cur) {
$flag = false; // $flag 表示这个 key 在数组中是不是也作为值,false表示不是,ture表示是
if ($ret = array_keys($arr, $cur)) {
foreach ($ret as $value) {
array_change($arr, $res[$cur], $value);
$flag = true;
}
}
if (!$flag) { // $flag = false 时执行
$res[] = $cur;
}
}

用户评论头像 你好发表于 2017年03月17日 13:24[回复]

继续

用户评论头像 你好发表于 2017年03月17日 13:21[回复]

很好

用户评论头像 天天套图吧ttttba.com发表于 2016年05月27日 22:16[回复]

其实我没看懂,隔行如隔山呀。

用户评论头像 Aimee发表于 2015年12月01日 19:23[回复]

孙子天天玩电脑。奶奶说:这样不行会影响学习的!孙子说:那我不玩电脑了,我去上网!奶奶说:那更不行,掉下来咋办!

用户评论头像 精悍的蜻蜓发表于 2015年08月20日 10:45[回复]

看看名字

用户评论头像 支付宝借条发表于 2015年08月17日 11:37[回复]

什么鬼!!

发表评论

change vcode