2016-08-01 5 views
0

Ich habe ein Verzeichnis, in dem Inhalt in meiner Datenbank sowohl Dateien als auch Unterverzeichnisname gespeichert wird, jetzt habe ich versucht, alle zu Unterverzeichnisse Namen auszuwählen, damit ich es in sql select verwenden kann Abfrage, aber mein Problem ist die ausgewählte Dir-Show wie diese cssjspageimages. Wie kann ich jeden dir-Namen durch Kommas und Anführungszeichen trennen und auch kein Komma im Nachnamen hinzufügen? Beispiel dafür, wie ich es will wie 'css','js','page','images' FrageGetrennte Namen mit einfachem Anführungszeichen und Kommas in php

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

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

Bonus suchen, nachdem ich die Sub-Datei erhalten haben und dir wie diese 'css','js','page','images' werde ich auch 'root','css','js','page','images'

Hier sind die Hauptwurzel dir Beispiel hinzuzufügen, ist mein Code

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

Nun, was ist, wenn das Root-Verzeichnis leer ist? Es wird immer noch Komma am Ende der Wurzel hinzufügen und ich werde Fehler in SQL Select erhalten. Wie kann ich dieses Problem beheben auch

+0

Interessant ist die Fest Teil tat aber der einfache Teil –

Antwort

1

Vielleicht:

<?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;  
} 

EDIT (die Frage bearbeiten zu beantworten):

<?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

Sehr nette Antwort – Alex

+0

@ Alex kann nicht herausfinden Bitte. – pah

+0

kann ich eine Bonusfrage diesbezüglich bitte – Alex

0

Als John Conde sagte, Sie waren wirklich in der Nähe :)

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

Vergessen Sie nicht, die letzten Zeichen dieser Zeichenfolge (letztes Komma) nach der Schleife zu entfernen:

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

Ich denke, Ihre "echo $ listdirs;" sollte auch außerhalb der Schleife sein.

1

Wenn die Aufgaben in der ursprünglichen Frage und die Follow-up "Bonus" -Frage zusammengeführt werden können, würde ich empfehlen, die von glob() zurückgegebenen Daten als Array, anstatt es sofort in eine Zeichenfolge zu konvertieren.

Auch beachten:

  • Sie können GLOB_ONLYDIR hinzufügen(), um glob so dass Sie nicht das Ergebnis durch is_dir filtern müssen().
  • glob() gibt bereits den pfadfreien Basisnamen zurück, so dass ich glaube nicht, dass Sie foreach gehen müssen und explodieren das Ergebnis auf der Suche nach den Verzeichnisnamen.

Wenn das alles klingt bearbeitbar, scheint dies zu tun, was Sie wollen:

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

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

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

Diese Methode behebt den Fehler Ich bekomme hier '$ result = end (explode ('/', $ fileinfo)); // Strenge Standards: Nur Variablen sollten als Referenz übergeben werden // $ result = explode ('/', $ fileinfo); // Hinweis: Array zu String-Konvertierung 'danke dafür – Alex

Verwandte Themen