Php strings vergleichen

  • PHP

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    Php strings vergleichen

    Guten Tag,

    ich versuche im moment 2 strings (User Agent) mit einander zu vergleichen leider scheitere ich daran. Der Vergleich sieht folgender maßen aus, ich lade mir aus einer .txt datei eine Liste mit UserAgents in ein Array. Dieses durchlaufe ich dann und vergleiche ob der Besucher UserAgent in der Liste vorhanden ist.

    Mein Php -script

    Quellcode

    1. if (file_exists($uaFile))
    2. {
    3. $uaContent = file($uaFile);
    4. foreach($uaContent AS $curUA)
    5. {
    6. if ($curUA == $userAgent)
    7. {
    8. echo '...ToDO...';
    9. exit;
    10. }
    11. else { echo $userAgent . '==' . $curUA . '<br />'; }
    12. }
    13. }


    Die Ausgabe die ich bekomme ist

    Quellcode

    1. test==test
    2. ...


    Also meinen else -Block, kann mir jemand erklären was ich hier falsch mache?

    PHP-Quellcode

    1. <?php
    2. $uaFile = 'useragents.txt';
    3. $userAgent = $_SERVER['HTTP_USER_AGENT'];
    4. if (file_exists($uaFile)){
    5. $uaContent = file($uaFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    6. $isInFile = array_search($userAgent, $uaContent);
    7. if (!empty($isInFile)) {
    8. // wurde gefunden
    9. echo $uaContent[$isInFile];
    10. echo '...ToDO...';
    11. } else {
    12. // nicht vorhanden
    13. echo 'not in the file';
    14. }
    15. }


    ist eigentlich mein Code-Stil aber ich denke für dein Script würde es reichen.
    Mit freundlichen Grüßen,
    Jan
    Alternativ wäre ein Blick auf Folgendes empfehlenswert:
    http://www.php.net/manual/de/function.strcmp.php
    "Vergleich zweier Strings" - Sollte das richtige sein ;) Ansonsten könnte es sein, dass du noch Whitespaces in deinen Strings hast...? Ein Leerzeichen am Ende des zweiten "test" kann man leicht nicht (/über-)sehen... Könnte man ja "trimmen".

    MfG,
    X-Zat
    Oder man vergleicht mit preg_match und dem Pattern ^\s*?<was_gesucht_wird>\s*?$ </overkill> :D
    Oder man holt sich den Dateiinhalt mit file_get_contents und splittet das in ein Array bei "\n", durchläuft es in ner Schleife ODER (was noch schneller ginge) man schiebt mit preg_match_all alle Matches in ein Array (Einzeiler):

    PHP-Quellcode

    1. <?php
    2. preg_match_all('/ *' . preg_quote($_SERVER['HTTP_USER_AGENT']) . ' */is', file_get_contents('./test.txt'), $arrFunde);
    3. //Und dann mal schauen ob was gefunden wird:
    4. echo var_dump($arrFunde);
    5. ?>

    is jetz ungetestet, könnte aber klappen.


    Link :thumbup:
    Hello World
    Oha, ein preg_match ist wohl nicht das nach dem ich suche, Pattern sind nicht gerade meine starke seite weder bei Php noch sonst ;). Aber daken für den Vorschalg. Durch den Post von Jan ist mir aufgefallen das ich der 'File -Methode' noch Properties mit geben kann, somit konnte ich mein eigenes Script schon lauffähig bringen. Und mit der geposteten Dokumentation von X-Zat denke ich habe ich alles was ich brauche um das script weiter auszubauen.

    Vielen Dank für eure Hilfe
    Oha, ein preg_match ist wohl nicht das nach dem ich suche

    Naja mag sein, die Frage is nur ob das Gewurschtel mit if-Abfrage hier und Schleife da und tralala besser ist ^^ Ich mein, alles in einer Zeile, wie geht's denn bitte noch simpler? :huh:

    Pattern sind nicht gerade meine starke seite

    Immer nur mit den Befehlen programmieren die du schon kannst bringt dich langfristig nicht weiter, es erscheint nur kurzfristig als die einfachere Lösung ;)

    Aber ich freu mich ja wenn's nun geklappt hat :)

    Link :thumbup:
    Hello World
    Mir geht es auch nicht darum einen Simplen Code auf die Beine zustellen. Ich bin hier vermutlich vorbelastet, daß equivalent zu preg_match ist bei c# RegEx und hier gibt es wesentlich performantere Mehotden. Ohne nun geprüft zu haben wie performant preg_match ist denke ich es ist dennoch performanter das ganze mit array_search zu lösen. Natürlich lasse ich mich auch gerne etwas besseren beleeren. Das leidige Verständniß -Problem bezüglich Pattern hat hier aber keinen Einfluss für meine Entscheidung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ () aus folgendem Grund: Verbessert...

    Hi,

    die Performance in diesem Fall würde sich erst bei beträchtlichen Datenmengen bemerkbar machen. Aber durchaus möglich, dass preg_match hier Overkill ist. Ich persönlich würde es aber trotzdem so machen.
    Aber wie auch immer, es gibt hier mehrere Ansätze, das umzusetzen, und einige davon kennst du nun. Nimm das womit du am besten zurecht kommst und gut ist ;)


    Link :thumbup:
    Hello World