0

所以如果我有这样的字符串,例如“/path1/folder/fun/yay/”

如何通过函数运行它以返回所有父路径的数组,如下所示:

array (
    '/',
    '/path1/',
    '/path1/folder/',
    '/path1/folder/fun/',
    '/path1/folder/fun/yay/'
)

这是我到目前为止所拥有的,显然它不起作用,至少可以说令人困惑......

$a = explode('/',$path); $ii = 0; $path_array = array();

for ($i = 0; $i < sizeof($a); $i++) {

    if ($a[$i]) { 

        $path_array[$ii] = "";

        for ($n = 0; $n < $i; $n++)
        {

        $path_array[$ii] .= $a[$n];

        }

        $ii++;

    }   
}

file_put_contents('text.txt',serialize($path_array));

谢谢!

顺便说一句,我的最终目标是能够在文件夹路径表上运行 SQL 查询,以增加文件夹及其所有父级的值。

也许有某种 SQL 运算符,我可以在其中选择路径是我输入的路径的一部分的所有行?反过来有点像这样:

mysqli_query($mysqli,'UPDATE content_folders SET size = size+'.filesize("content/$id").' WHERE path LIKE "'.$path.'%"')
4

2 回答 2

0

至于 PHP 函数 - 这样的事情会起作用:

function returnAllPaths ( $fullPath = '/' , Array $pathHistory = array() )
{
    while ( strlen($fullPath) > 1 AND $fullPath[0] === '/' )
    {   
        array_push($pathHistory, $fullPath); 
        $fullPath = preg_replace('%(.*/)[^/]+(?:/)?$%is', '$1', $fullPath);        
    }
    array_push($pathHistory, $fullPath);
    return array_reverse($pathHistory);
}
于 2013-04-24T02:47:00.813 回答
0

你可以用这个

$path = '/path1/folder/fun/yay/';
$path = explode('/',$path);
$path = array_filter($path);
$iniVal = '';
$array_paths = array();
array_push($array_paths,'/');
foreach($path as $array){
    $value = $iniVal.'/'.$array.'/';
    array_push($array_paths,$value);
    $iniVal .= '/'.$array;
}


//print_r($array_paths);

输出将显示在数组中,例如:

Array ( [0] => / [1] => /path1/ [2] => /path1/folder/ [3] => /path1/folder/fun/ [4] => /path1/folder/fun/yay/ )

如同

array (
    '/',
    '/path1/',
    '/path1/folder/',
    '/path1/folder/fun/',
    '/path1/folder/fun/yay/'
)

演示PHP 小提琴

于 2013-04-24T06:22:30.473 回答