2015-05-18 10 views
5

Ich muss den Bildordner für das Hinzufügen einiger Produktbilder überprüfen. Meine Produktliste Array hat SKUs wie a48be25, A48be29, A48BE30 und mein Bildordner hat Bilder wie a48BE25_1.jpg, a48bE29_2.JPG, A48BE30_1.jpg und so weiter.PHP - Groß-/Kleinschreibung nicht beachten Dateisuche

Wie Sie sehen können, sind die Bilder und SKUs gemischt. Ich muss SKUs irgendwie den Dateinamen zuordnen. Wenn ich glob("my/dir/{$SKU}*.jpg") benutze, wird es nach meinem besten Wissen nicht in Groß- und Kleinschreibung Betriebssystemen funktionieren. Gibt es eine Möglichkeit, glob zu erzwingen, in einer Groß-und Kleinschreibung zu suchen?

EDIT: Ich glaube nicht, dass dieser Thread ein Duplikat von this one ist. Ich sage das, weil ich in meinem Fall viele SKUs haben kann, die gemischte Fälle haben können. In dem erwähnten Thread hatte OP nur das Wort CSV in gemischten Fällen, so glob('my/dir/*.[cC][sS][vV]') könnte dort gut funktionieren.

+2

Haben Sie die [zweite Antwort] (http://stackoverflow.com/a/2520643/749181) auf die verknüpfte Frage versucht? Es schlägt vor, dass Sie die Dateinamen zuerst abrufen und dann in einem zweiten Schritt ohne Berücksichtigung der Groß- und Kleinschreibung vergleichen. –

+0

@GeorgeCummins Ich habe über 300000 Bilder und 60000 Produkte hinzuzufügen. Ich weiß, dass ich das schaffen könnte, aber es wäre zu teuer, nicht wahr? Wenn nichts funktioniert, muss ich diesen Ansatz wählen. :) – Gogol

+1

@ noc2spam ツ Ich denke, wenn Sie so viele Bilder haben, dann ist es schneller, dies mit PHP zu handhaben und lassen Sie das Dateisystem dies nicht tun. – Rizier123

Antwort

2

Schließlich habe ich schließlich alle Bilder aus dem Ordner abgerufen und nach jedem SKU im Bildnamen-Array gesucht.

Der folgende Code mein Problem gelöst:

$path = $image_path ."/*.{jpg,png,gif}"; 
$all_images = glob($path, GLOB_BRACE); 
$icount = count($all_images); 
for($i = 0; $i < $icount; $i++) 
{ 
    $all_images[$i] = str_replace($image_path.'/', '', $all_images[$i]); 
} 

foreach($products as $product){ 
    $matches = preg_grep ('/^'.$product['sku'].'(\w+)/i', $all_images); 
} 

Trotzdem würde ich lieben Groß- und Kleinschreibung glob in Zukunft umgesetzt zu sehen.

+1

Ich habe diesen Tab offen gehalten lol - Schön zu sehen, dass Sie eine Lösung gefunden haben, aber ein Globe ohne Berücksichtigung der Groß-/Kleinschreibung, wie Sie sagen, wäre eine würdige Ergänzung für eine zukünftige PHP-Version. Etwas, das du auf php.net posten kannst - * Cheers * –

+0

Sorry Mann Ich kann den C Code nicht posten. Ich bin dafür zu noob. Ich bin nur ein Webentwickler. Ich hoffe, jemand tut es in einer zukünftigen PHP-Version. :) – Gogol

+2

Kein Problem. Ich werde das Wort herumreichen. Ich habe einen Freund, der diesen Typ bei PHP.net kennt ;-) * Prost * –