array_filter用于制作面包屑

时间:2014-08-22 06:18:30

标签: php breadcrumbs array-filter

我写了一个简单的函数(复制和改编,更像是它!)来为一个应用程序制作面包屑。我的文件夹结构是这样的,如果忽略某些文件夹,跟踪仍然有效。我看了很久没有进展......

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 '&nbsp;&raquo;&nbsp;<a href="'.($address .= '/'.$filteredArr[$i]).'">'.ucfirst($filteredArr[$i]).'</a>';
    }
}

提前致谢,非常感谢任何帮助!

1 个答案:

答案 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,值3601,对值'files'为{{1}},因此检查键的差异不会达到预期的效果。< / p>