’a’, ‘c’=>’a’, ‘e’=>’b’, ‘d’=>R這是鄭曉技術(shù)博客的原創(chuàng)博文"/ >
當(dāng)前位置:博客首頁>>片言碎語 >> 閱讀正文

【PHP】一個(gè)百度面試題?

作者: 鄭曉 分類: 片言碎語 發(fā)布于: 2015-07-03 13:34 瀏覽:8,868 評(píng)論(7)


據(jù)說是一個(gè)百度php的面試題,已給定一個(gè)數(shù)組:
$arr = array(‘b’=>’a’, ‘c’=>’a’, ‘e’=>’b’, ‘d’=>’b’, ‘f’=>’c’, ‘g’=>’e’, ‘h’=>’f’);
寫一個(gè)算法,完成到以下格式的轉(zhuǎn)換:


array (
'a' => array (
'b' => array (
'e' => array (
[0] => 'g',
),
[0] => 'd',
),
'c' => array (
'f' => array (
[0] => 'h',
),
),
),
)

這個(gè)結(jié)構(gòu)應(yīng)該屬于一種Trie樹。當(dāng)時(shí)在寫的時(shí)候由于沒發(fā)現(xiàn)array_keys()函數(shù)第二個(gè)參數(shù)(汗一個(gè)先),于是寫了以下這個(gè)方法來實(shí)現(xiàn)。

function getsomething(&$arr, &$re, $c='') {
$c or $c=array_shift(array_keys($arr));//當(dāng)未指定開始位置時(shí) 從數(shù)組第一個(gè)元素開始
$flag= false; //標(biāo)記 當(dāng)有和$c對(duì)應(yīng)的key(鍵)時(shí) 設(shè)為true
while($k = array_search($c, $arr)) { //循環(huán)獲取值為$c的key。
getsomething($arr, $re[$c], $k); //一直遞歸到最后沒有key對(duì)應(yīng)時(shí)
unset($arr[$k]); //移除 這個(gè)元素已經(jīng)不會(huì)再使用了
$flag = true;
}
//當(dāng)flag為真時(shí) 說明之前獲得過正常存在的key,不會(huì)繼續(xù)生成[0]下標(biāo)的元素
if(! $flag) return $re[] = $c;
}
//調(diào)用
getsomething($arr, $re, 'a');

雖然有點(diǎn)兒奇葩,至少還是實(shí)現(xiàn)了。以下是某網(wǎng)友使用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;
}

? ? ? ?

本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。

本文永久鏈接: http://www.yjfs.org.cn/baidu-php-mianshiti.html

【PHP】一個(gè)百度面試題?:目前有7 條留言

用戶評(píng)論頭像 三叔發(fā)表于 2017年07月20日 17:39[回復(fù)]

結(jié)合博主的兩種方法寫了一個(gè)
function array_change(&$arr, &$res, $cur) {
$flag = false; // $flag 表示這個(gè) key 在數(shù)組中是不是也作為值,false表示不是,ture表示是
if ($ret = array_keys($arr, $cur)) {
foreach ($ret as $value) {
array_change($arr, $res[$cur], $value);
$flag = true;
}
}
if (!$flag) { // $flag = false 時(shí)執(zhí)行
$res[] = $cur;
}
}

用戶評(píng)論頭像 你好發(fā)表于 2017年03月17日 13:24[回復(fù)]

繼續(xù)

用戶評(píng)論頭像 你好發(fā)表于 2017年03月17日 13:21[回復(fù)]

很好

用戶評(píng)論頭像 天天套圖吧ttttba.com發(fā)表于 2016年05月27日 22:16[回復(fù)]

其實(shí)我沒看懂,隔行如隔山呀。

用戶評(píng)論頭像 Aimee發(fā)表于 2015年12月01日 19:23[回復(fù)]

孫子天天玩電腦。奶奶說:這樣不行會(huì)影響學(xué)習(xí)的!孫子說:那我不玩電腦了,我去上網(wǎng)!奶奶說:那更不行,掉下來咋辦!

用戶評(píng)論頭像 精悍的蜻蜓發(fā)表于 2015年08月20日 10:45[回復(fù)]

看看名字

用戶評(píng)論頭像 支付寶借條發(fā)表于 2015年08月17日 11:37[回復(fù)]

什么鬼?。?/p>

發(fā)表評(píng)論

change vcode