我写了一个简单的函数(复制和改编,更像是它!)来为一个应用程序制作面包屑。我的文件夹结构是这样的,如果忽略某些文件夹,跟踪仍然有效。我看了很久没有进展......
function breadCrumb(){
// folders to ignore
$filterFolders = array('360', 'files');
if($location = substr(dirname($_SERVER['PHP_SELF']), 1)){
$dirlist = explode('/', $location);
}else{
$dirlist = array();
}
/** update the array with non required folders **/
$filteredArr = array_diff_key($dirlist, array_flip($filterFolders));
$count = array_push($filteredArr, basename($_SERVER['PHP_SELF']));
$address = 'http://'.$_SERVER['HTTP_HOST'];
echo '<a href="'.$address.'">Home</a>';
for($i = 0; $i < $count; $i++){
echo ' » <a href="'.($address .= '/'.$filteredArr[$i]).'">'.ucfirst($filteredArr[$i]).'</a>';
}
}
提前致谢,非常感谢任何帮助!
答案 0 :(得分:1)
我的代码中没有使用 array_filter ,这与问题标题的建议相反。但是,在这种情况下,您应该在值而不是键上运行差异函数(因为您没有指定任何值)。
因此
$filteredArr = array_diff_key($dirlist, array_flip($filterFolders));
^
应该是
$filteredArr = array_diff($dirlist,$filterFolders); // you don't even ve to flip
例如
$filterFolders = array('360', 'files');
您期望这些钥匙是什么?对于值0
,值360
为1
,对值'files'
为{{1}},因此检查键的差异不会达到预期的效果。< / p>