Stringinhalt mit Arrayelemente vergleichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Stringinhalt mit Arrayelemente vergleichen

    Hallo, ich komm hier nicht weiter:

    PHP-Code:
    $test="Die 4 Apostel sind folgende drei, Peter und Paul"
    $array=array('eins','zwei','drei','vier');
    if(
    in_array($test,$array)) echo "Gefunden"
    Das ganze funktioniert nicht.
    Ich möchte den Inhalt von $test mit allen Arrayelementen vergleichen
    so das in diesem Fall "drei" angezeigt wird.
    Warum klappt das mit "in_array" hier nicht?
    ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

  • #2
    Hallo,

    Zitat von RamonaS Beitrag anzeigen
    Das ganze funktioniert nicht.
    Das tut es schon, aber so wie es soll und nicht so, wie du es dir wünschst.

    in_array prüft den gesamten String, ob er im Ganzen im Array enthalten ist und das ist bei dir nicht der Fall.

    Das was du suchst, wird foreach und stripos sein.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo, manchmal fehlt eben ein guter Denkanstoß

      Ok das funktioniert so wunderbar:
      PHP-Code:
      <?php
      $str
      ='Das ist ein ganzgeheimer Text'$arr=array('eins','zwei','geheim','vier');
      echo 
      "<b>stripos & in_array - Arrayelement in einem String finden</b><br />\n";
      foreach(
      $arr as $val)
       {
      $pos=stripos($str,$val);
        if(
      $pos!==false) {echo "Arrayelement <b>'$find'</b> wurde in <b>'$str'</b> an Position <b>$pos</b> gefunden<br />";}
        else {echo 
      "Arrayelement <b>'$find'</b> wurde NICHT in <b>'$str'</b> gefunden<br />";}
       }
      ?>
      Jetzt habe ich noch eine Frage zu Geschwindigkeit:
      Ist das die schnellste möglichkeit die es in PHP gibt?
      Ich muß einige Dateien damit durchsuchen, die sind teilweise bis 200-300 MB groß!
      ACHTUNG: RamonaS zeigte ein beschämendes Verhalten in der Vergangenheit

      Kommentar


      • #4
        Zitat von RamonaS Beitrag anzeigen
        ... Ok das funktioniert so wunderbar:
        PHP-Code:
        <?php
        $str
        ='Das ist ein ganzgeheimer Text'$arr=array('eins','zwei','geheim','vier');
        echo 
        "<b>stripos & in_array - Arrayelement in einem String finden</b><br />\n";
        foreach(
        $arr as $val)
         {
        $pos=stripos($str,$val);
          if(
        $pos!==false) {echo "Arrayelement <b>'$find'</b> wurde in <b>'$str'</b> an Position <b>$pos</b> gefunden<br />";}
          else {echo 
        "Arrayelement <b>'$find'</b> wurde NICHT in <b>'$str'</b> gefunden<br />";}
         }
        ?>
        Jetzt habe ich noch eine Frage zu Geschwindigkeit:
        Ist das die schnellste möglichkeit die es in PHP gibt?
        Sicher nicht. Es gibt immer Möglichkeiten zur Optimierung. Preg_match('/(?:...|...)/') ist schneller als ein preg_match() in 'ner foreach()-Schleife. Preg_match('/.../i') ist schneller als stripos(). Strpos() ist schneller als stripos() usw. ...

        Um die optimalste Variante herauszufinden, musst du halt mit brauchbaren Beispieldaten Messungen durchführen.

        Ich muß einige Dateien damit durchsuchen, die sind teilweise bis 200-300 MB groß!
        Warum verwendest du dann PHP?
        Wie liegen die Daten vor?
        Wie bekommst du sie von der Festplatte in den Hauptspeicher?
        Ist es möglich, die Daten in eine Datenbanktabelle zu bekommen? (Selbst SQLite dürfte effizienter suchen als PHP.)
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar

        Lädt...
        X