Php 使用数组_slice()转到上一个文件夹

Php 使用数组_slice()转到上一个文件夹,php,arrays,slice,Php,Arrays,Slice,我已经建立了我的第一个文件管理器,我需要一些导航部分的帮助。以下是本节的代码: # CONFIGURATION: Folder $path = (empty($_GET['p']) ? '../../../' : '../../../'.$_GET['p']); # CONTROL: The folder exists if(file_exists($path)) { $results = scandir($path); } # CONTROL: Root if(!empty($

我已经建立了我的第一个文件管理器,我需要一些导航部分的帮助。以下是本节的代码:

# CONFIGURATION: Folder
$path = (empty($_GET['p']) ? '../../../' : '../../../'.$_GET['p']);

# CONTROL: The folder exists
if(file_exists($path)) {
    $results = scandir($path);
}



# CONTROL: Root
if(!empty($_GET['p'])) {
    $navigation_loop = explode('/', $_GET['p']);

    if(count($navigation_loop) > 1) {
        $sliced = array_slice($navigation_loop, 0, -1);
    }


    # LOOP
    foreach($navigation_loop AS $navigation) {
        echo '<a href="javascript:void(0)" class="filemanager-link" id="path-navigation" data="';

        # CONTROL: There's more than one
        if(count($navigation_loop) > 1) {
            echo implode('/', $sliced);

        # CONTROL: There's not more than one
        } else {
            echo $navigation;
        }

        echo '">';
            echo $navigation;
        echo '</a>';
    }
}
#配置:文件夹
$path=(空($\u-GET['p'])?“../../../../”:“../../../../.”$\u-GET['p']);
#控件:文件夹已存在
如果(文件_存在($path)){
$results=scandir($path);
}
#控制:根
如果(!empty($\u GET['p'])){
$navigation\u loop=explode('/',$\u GET['p']);
如果(计数($navigation\u loop)>1){
$sliced=array\u slice($navigation\u loop,0,-1);
}
#环路
foreach($navigation\u循环为$navigation){
回声';
}
}
$\u GET['p']
包含当前文件夹的完整路径,即
some/path/to/show/you
。此
GET
中从不显示文件名

现在问题来了:当我在
some/path
点击
some
,网站会把我带到文件夹
some
。但是如果我在
some/path/to
点击
some
,网站就会把我带到
some/path

我知道问题是什么(
array\u slice($navigation\u loop,0,-1)
),但我不知道如何解决这个问题。如果我在
some/path
中,则
array\u slice()函数的
-1
。但是当我在
some/path/to
时,如果我想转到
some
应该是
-2
,如果我想转到
some/path
应该是
-1


如何解决此问题?

您不能计算偏移量吗

$navigation_loop = explode('/', $_GET['p']);
$offset = -1 * (count($navigation_loop) - 1);
if(count($navigation_loop) > 1) {
    $sliced = array_slice($navigation_loop, 0, $offset);
}

我不确定我是否完全理解这个问题,但这似乎应该为slice调用获得正确的参数。

请尝试将此用于主if语句:

if(!empty($_GET['p'])) {
    $navigation_loop = explode('/', $_GET['p']);

    # LOOP
    for ($level=0; $level < count($navigation_loop); $level++) {
        echo '<a href="javascript:void(0)" class="filemanager-link" id="path-navigation" data="';

        # CONTROL: There's more than one
        $sliced = array_slice($navigation_loop, 0, ($level+1));
        if(count($navigation_loop) > 1) {
            echo implode('/', $sliced);
        # CONTROL: There's not more than one
        } else {
            echo $sliced;
        }

        echo '">';
            echo $navigation_loop[$level];
        echo '</a>';
    }
}
if(!empty($\u GET['p'])){
$navigation\u loop=explode('/',$\u GET['p']);
#环路
对于($level=0;$level

应该更像你想要的。

你很了解我,但是如果我点击
我会去
一些
。如果我点击
路径
,我会用你的代码再次进入
一些
。您应该转到您正在单击的文件夹:)