Andre: BildURL mit PHP Logik

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é

  1. 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

  2. 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

    --
    Computer funktionieren grundsätzlich nicht richtig.
    Wenn doch, hast du etwas falsch gemacht.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. 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

  3. 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

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. 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

      --
      Wer keiner Fliege etwas zuleide tut, darf sich nicht über die Maden im Fleisch wundern.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. 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

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de