array absuchen ob ein ähnlicher String vorhanden

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

  • array absuchen ob ein ähnlicher String vorhanden

    Hallo zusammen,

    wie kann ich mittels PHP eine Suchabfrage ähnlich der SQL Suche LIKE 'XY%' erzeugen?

    Ich bräuchte es, um ein Array mittels eines unvollständigen Strings zu durchsuchen.

    BSP:
    Array: a:2i:0;s:4:"auto";i:1;s:5:"ampel";}

    Eingabe "a"

    Ausgabe:
    Ampel
    Auto
    -----------------------------------------------------------------------
    Eingabe: "au"

    Ausgabe:
    Auto


    Grüße

    ToM80
    Zuletzt geändert von wahsaga; 26.07.2007, 11:28.

  • #2
    Du musst die einzelnen Elemente des Arrays durchgehen, den ersten Buchstaben extrahieren und dann vergleichen.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      genau das dachte ich lässt sich vermeiden.
      geht das nicht auch ressourcen schonender?

      Kommentar


      • #4
        array_filter() und eine entsprechende Callback Funktion.
        Die Callback Funktion sollte true zurückgeben wenn das Array Element mit dem Suchstring beginnt (ein strpos() also 0 zurückgibt) ansonsten sollte die Funktion false returnen.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          das hört sich schon besser an, leider werde ich aus der offiziellen beschreibung nicht sehr schlau
          wie erzeuge ich denn die callback funktion?

          Kommentar


          • #6
            PHP-Code:
            function callBack($elem) {
              
            $search 'au';
              if(
            strpos($elem,$search) === 0) {
                return 
            true;
              }else{
                return 
            false;
              }
            }
            $arr array_filter($array,"callBack"); 
            in etwa so

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              in etwa so
              OffTopic:
              Du bist so großzügig heute ...
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                Danke für eure Hilfe,

                ich habe es jedoch nun anders gelöst, da die array_filter Lösung nicht das Ergebnis brachte wie ich es gebrauchen konnte, oder aber ich es nicht richtig umsetzen konnte.

                meine Lösung:
                PHP-Code:
                $SW="au";
                $KW[0]="auto";
                $KW[1]="ampel";
                $KW[2]="MauMau";
                $istVorhanden=Array();
                for (
                $e=0;$e<(count($KW)-1);$e++) {
                  if (
                stripos($KW[$e],$SW)!==FALSE) {
                    
                $istVorhanden[]=$KW[$e];
                  }

                Was weniger schön ist, das nun auch alle Wörter ähnlich sind, die $SW im Laufe des Wortes haben. Besser wäre es, wenn nur die Wörter angezeigt werden die $SW am Anfang haben.
                Also anstatt nun als Anzeige
                "auto"
                "MauMau"
                zu bekommen will ich eigentlich nur Auto sehen.
                Hat da vllt. noch jemand eine zündende Idee?

                Grüße

                ToM80

                Kommentar


                • #9
                  und auch hier habe ich nun die Lösung. Ich drehe sowohl das Suchwort, als auch das Wort aus dem Array um und suche dann ach dem letzten Auftreten der gesuchten Zeichenfolge

                  BSP:
                  PHP-Code:
                  $SW="au";

                  $KW[0]="auto";
                  $KW[2]="ampel";
                  $KW[3]="MauMau";

                  $istVorhanden=Array();
                  $SW=strrev($SW);
                  for (
                  $e=0;$e<(count($KW)-1);$e++) {
                    if (
                  strripos(strrev($KW[$e]),$SW)!==FALSE) {
                      
                  $istVorhanden[]=$KW[$e];
                    }

                  Ausgabe: auto

                  Kommentar


                  • #10
                    Besser wäre es, wenn nur die Wörter angezeigt werden die $SW am Anfang haben.
                    Du scheinst mir strpos() resp stripos() nicht verstanden zu haben. Wenn diese Funktionen den Wert 0 zurückgeben dann steht der Suchstring am Anfang. Jeder andere Wert als 0 meint, dass der Text irgendwo oder nirgendwo vorkommt.
                    Btw. was für ein Ergebnis hat denn array_filter() gebracht und warum konntest du es nicht gebrauchen ? imho sollte es so funzen.

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      autsch, natürlich, sry das habe ich nicht bedacht *selbstditscht*

                      Filter hat mir asap einen Wert zurück geliefert, wenn ich es richtig in Erinnerung habe.

                      Ich musste den Wert aber speichern können um Ihn dann in einer Selectbox wieder auszugeben.

                      Grüße

                      ToM80

                      Kommentar


                      • #12
                        Ich musste den Wert aber speichern können um Ihn dann in einer Selectbox wieder auszugeben.
                        Die Werte wurden ja im Rückgabewert von array_filter() gespeichert...
                        PHP-Code:
                        //in $arr stehen deine gesuchten Werte
                        $arr array_filter($array,"callBack"); 
                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          hatte das ganze mit einer if-abfrage verknüpft. da hat er dann halt die wert gleich ausgeworfen.
                          wie auch immer, die andere funktion funzt und denke wird nicht viel mehr ressourcen verbrauchen, als array_filter, von daher werde ich es bei der funktion lassen, wenn auch ich das umdrehen des strings wieder rausnehmen werde, und auf pos==0 gehen werde (danke noch mal für den zaunpfahl wink).

                          Kommentar

                          Lädt...
                          X