2013-04-24 50 views
0

所以如果我有這樣的字符串,例如「/路徑1 /文件夾/開心/耶/」生成一個URL的父母路徑數組

如何運行,通過一個函數返回的所有父路徑的排列,看起來像這樣:

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.'%"') 

回答

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); 
} 
+0

什麼是$ ReturnPath這樣論據先生? – 2013-04-24 02:49:16

+0

對不起 - 我正在編輯一些其他代碼,並完全失去它。現在用新功能更新了答案:)(謝謝你的提醒!) – Jesperhag 2013-04-24 02:52:59

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/' 
) 

DEMOPHP FIDDLE