2016-08-01 55 views
0

我有一個目錄,它的內容保存在我的數據庫中的兩個文件和子目錄名稱,現在我試圖選擇所有的子目錄名稱,所以我可以在sql select中使用它查詢但我的問題是這樣的選擇目錄顯示cssjspageimages。 我怎樣才能用逗號和引號分隔每個目錄名稱,而不是在姓氏中添加逗號?我是多麼希望它看起來像'css','js','page','images'單引號和逗號在php中的單獨名稱

<?php 
$dirs = array_filter(glob('*'), 'is_dir'); 

if(!empty($dirs)){ 
$listdirs = ''; 
foreach ($dirs as $fileinfo){ 
     $result = end(explode('/', $fileinfo)); 
     $listdirs .= $result; 
echo $listdirs;  
    } 
} 
?> 

獎金問題 後,我有得到子文件和目錄這樣'css','js','page','images'我也將增加主根目錄例如'root','css','js','page','images'

這裏是 比如我代碼

<?php 
$cb = basename(dirname(__FILE__)); //the current base name 
$root = "'".$cb."'," 
echo $root . $listdirs; 
?> 

現在如果根目錄爲空,該怎麼辦?它仍然會在根結尾添加逗號,並且我會在sql select中出錯。 我怎樣才能解決這個問題也

+0

有趣的是你做了最困難的部分,但不能找出最簡單的部分 –

回答

1

也許這:

<?php 

$dirs = array_filter(glob('*'), 'is_dir'); 

if (!empty($dirs)) { 
    $listdirs = ''; 

    foreach ($dirs as $fileinfo) { 
     $result = end(explode('/', $fileinfo)); 
     $listdirs .= '\'' . $result . '\','; /* Enclose the $result in quotes (') and append a comma (,) */ 
    } 

    $listdirs = rtrim($listdirs, ','); /* Strip the trailling comma */ 
    echo $listdirs;  
} 

編輯(回答這個問題編輯):

<?php 

$cb = basename(dirname(__FILE__)); //the current base name 
$root = "'".$cb."'" . ($listdirs ? "," . $listdirs : ""); /* Check if $listdirs contains anything... if so, append a comma (,) and $listdirs... otherwise append nothing. */ 
echo $root; 
+1

很可愛答案 – Alex

+0

@Alex別客氣。 – pah

+0

我可以問一個有關這個獎金問題請 – Alex

0

正如約翰·孔德說,你是非常接近:)

$listdirs .= "'". $result ."',"; 

不要忘記刪除該字符串的最後一個字符(最後一個逗號),在循環之後:

$listdirs = substr($listdirs,0,-1); 

我想你的「echo $ listdirs;」也應該在循環之外。

1

如果原始問題中的任務和後續「獎金」問題可以合併,我建議將glob()返回的數據保存爲數組,而不是立即將其轉換爲字符串。

還要注意的是:

  • 您可以添加到GLOB_ONLYDIR glob的(),所以你並不需要通過is_dir過濾結果 ()。
  • glob()已經返回無路徑基名,所以我 不認爲你需要通過foreach和爆炸結果 尋找目錄名稱。

如果這一切聽起來可行,這似乎做你想要什麼:

$listdirs = ""; 
$dirs = glob('*', GLOB_ONLYDIR); 
$cb = basename(dirname(__FILE__)); 

if($cb) 
    array_unshift($dirs, $cb); 

if(count($dirs)) 
    $listdirs = "'" . implode($dirs, "','") . "'"; 
+0

此方法修復了我在這裏得到的錯誤'$ result = end(explode('/',$ fileinfo)); //嚴格標準:只能通過引用傳遞變量// $ result = explode('/',$ fileinfo); //注意:數組到字符串的轉換'謝謝 – Alex