BildURL mit PHP Logik
Andre
- php
0 bruno10 Der Martin
0 Andre
0 Tom0 Der Martin
0 Tom
Hallo,
ich hoffe auf eure Hilfe bei folgendem Problem. Ich habe verschieden bezeichnete Bilder auf einem Server, die ungefähr mit einer Spalte aus einer CSV übereinstimmen.
Ich will die Bilder vom Server abrufen und der entsprechenden Zeile in der CSV zuordnen.
Beispiel: DIe Zelle in der CSV heisst z.b. "T-Shirt-L/s Forvert Pigalle
"
Das Bild heisst: longsleeve-pigalle.jpg
Wie würde ich denn hier einen Match hinbekommen, so dass das richtige Bild gefunden wird in PHP? Müsste ja irgendwie mit preg_match und einem Befehl, nur das letzte Wort aus der CSV-Spalte auszulesen, hinzubekommen sein oder?
Für jede Hilfe bin ich dankbar.
Viele Grüße
André
Ich bin mir nicht ganz sicher, ob du das gleiche meinst, wie ich.
So wie ich dich verstehe ließt du die Zelle aus der CSV-Datei in einen String ein (z.B.: $string) und dann willst du das richtige Bild dazu herausfinden, oder?
Wenn ja, dann würde ich nciht preg_match, sondern stripos verwenden.
<?php
$string=... // Aus der CSV-Datei
$bilder=array();
$bilder[1]="irgendwas";
$bilder[2]="irgendwas anderes";
$bilder[3]="pigalle";
...
$i=1;
while($i<=count($bilder)) {
if(stripos($string,$bilder[$i])!==FALSE) { //Übereinstimmung gefunden
$j=$i;
$i=count($bilder);
}
$i++;
}
if($j=="") {
echo 'Kein Bild gefunden';
}
else {
$bilder2=array();
$bilder2[1]="irgendwas.jpg";
$bilder2[2]="irgendwas anderes-nix.jpg";
$bilder2[3]="longsleeve-pigalle.jpg";
...
echo 'Das Bild: <img src="'.$bilder2[$j].'" />;
}
?>
Ist zwar nicht die eleganteste Lösung, aber sollte funktionieren, wenn du ein bisschen darüber nachdenkst kommste vielleicht noch auf was besseres.
bruno1
Hi,
Ich will die Bilder vom Server abrufen und der entsprechenden Zeile in der CSV zuordnen.
um Bilder vom Server abzurufen, musst du aber den Namen schon haben.
Beispiel: DIe Zelle in der CSV heisst z.b. "T-Shirt-L/s Forvert Pigalle
"
Mit Zeilenumbruch im Datenfeld? Lästig ...
Das Bild heisst: longsleeve-pigalle.jpg
Wie würde ich denn hier einen Match hinbekommen, so dass das richtige Bild gefunden wird in PHP?
Ich wüsste nicht, wie das gehen soll, ohne eine konkrete Systematik zu kennen. Ich sehe zwar, dass das Fragment "Pigalle" bzw. "pigalle" die Ähnlichkeit ausmacht, aber wie soll ein Stück Programmlogik das erkennen? Es ist ja nicht so, dass du "einfach nur" zwei Strings auf Ähnlichkeit überprüfen willst, sondern den zweiten String (den Bildnamen) müsstest du ja überhaupt erst erraten!
Müsste ja irgendwie mit preg_match und einem Befehl, nur das letzte Wort aus der CSV-Spalte auszulesen, hinzubekommen sein oder?
Nö. Einerseits: Wie sollte dir ein RegEx hier helfen? Andererseits: Wenn du das letzte Wort des Feldes nimmst, hast du "Pigalle". Okay, noch in Kleinbuchstaben wandeln, also "pigalle". Woher willst du nun noch das Präfix "longsleeve-" erraten?
Für jede Hilfe bin ich dankbar.
Gut und schön. Ich fürchte, da ist Hilfe sehr schwierig.
So long,
Martin
Hi Martin,
das mit dem Umbruch ist ein Versehen, das steht schon in einer Zeile ( auch ohne Anführungsstriche).
Ich dachte halt, ich kann sagen: Matche das letzte Wort dieser Spalte mit allen Bildern auf dem Server. Bei einem Resultat hole dir den Bildnamen und ziehe das Bild".
Aber scheint ja leider nicht zu gehen, eine durchgehende Logik gibt es leider nicht, da größtenteils Wörter im Bildnamen auftauchen, die ich nicht in der CSV habe...
Danke und Grüße
Hello,
ich befürchte, dass Dir da nur Levenshtein oder etwas Ähnliches helfen kann
http://www.php.net/manual/en/function.levenshtein.php
Und das müsstest Du dann auch noch auf alle Paarungen von Fragmenten ansetzen. Das gibt zwar dann eine recht große Datenmenge, aber die Vorschlagsliste wird nachher sicherlich überschaubar bleiben.
ungefähre Vorgehensweise:
- Lese alle Dateinamen ein
- Lese alle Referenzindikatoren aus der CSV-Datei ein
- Zerlege alle Dateinamen an klassischen Trennzeichen und mache einen eigenen Datensatz
daraus, der einen eineindeutigen Index zum Original behält
- Zerlege alle Referenzindikatoren an klassischen Trennzeichen und mache einen eigenen Datensatz
daraus, der einen eineindeutigen Index zum Original behält
- Gehe das eine Array Saatz für Satz durch und vergleiche es mit der Levenshtein-Funktion
mit allen Einträgen des zweiten. Merke dir das Ergenbnis und die Indexe der Arrays.
- Bei den höchsten Übereinstimmungen im Levenshtein-Result solltest Du nun auch Deine
Treffer finden, die Du nun wieder zusammenbauen kannst, wenn sie nach Handkontrolle als
passend erkannt wurden.
- die restlichen Ergebnisse wirst Du vermutlich getrost wegschmeißen können...
Vorher solltest Du aber das Memory-Limit deines Scriptes noch gewaltig hochsetzen. PHP-Arrays verbrauchen eine Menge Platz im Speicher.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
ich befürchte, dass Dir da nur Levenshtein oder etwas Ähnliches helfen kann
ich dachte kurz daran; das setzt aber voraus, dass man schon potentielle Paare hat.
- Lese alle Dateinamen ein
Woher? Ich hatte André so verstanden, dass er die Namen erst erzeugen (ich schrieb "erraten") muss.
Ciao,
Martin
Hell-oh Martin,
heute bist Du aber noch nicht richtig wach, oder?
ich befürchte, dass Dir da nur Levenshtein oder etwas Ähnliches helfen kann
ich dachte kurz daran; das setzt aber voraus, dass man schon potentielle Paare hat.
Wei man die erzeugen müsste, habe ich ja beschrieben.
- Lese alle Dateinamen ein
Woher? Ich hatte André so verstanden, dass er die Namen erst erzeugen (ich schrieb "erraten") muss.
In "Natural Deutsch" bist Du nicht so geübt, glaube ich. :-)
Ich übersetze daher mal:
"Ich habe verschieden bezeichnete Bilder auf einem Server, die ungefähr mit einer Spalte aus einer CSV übereinstimmen."
Ich habe in meinem Dateisystem Bilder mit Dateinamen, die mit einem Ausdruck in einer Spalte einer CSV-Datei Ähnlichkeit haben.
Andre hat also schon Dateinamen zur Verfügung. Er hat auch Referenzindikatoren (es sind ja noch keine Referenzen, könnten sich aber dazfür qualifizieren) zur Verfügung. Wie Dateinamen und Referenzindikatoren aussehen können, hat Andre anhand eines Beipiels gezeigt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg