Array-Problem

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

  • Array-Problem

    Moin Leute,

    zunächst möchte ich mal den Zusammenhang erläutern.

    Ich möchte mir für meine Seite eine Such-Funktion basteln, mit der man die Titel der Einträge durchsuchen kann. Dazu wird zunächsteinmal die Sucheingabe in die einzelnen Wörter aufgesplittet und in ein Array eingelesen.

    PHP-Code:
    $suchbegriff $_POST['suchbegriff'];
    $suche explode(" "$suchbegriff); 
    Dann wird mittels foreach jeder vorhandene Titel nach jedem Wort im Array durchsucht, über folgendes Query:

    PHP-Code:
    $query "SELECT title FROM eintraege WHERE title LIKE '%$such_element%' AND state = '2'"
    So, nun möchte ich aber Worte wie Artikel oder Personalpronomen da herauslassen, da das die Suche verfälschen würde.

    Ich hab schon herausgefunden, dass sich mit:

    PHP-Code:
    $artikel = array('der''die''das');
    foreach(
    $artikel as $artikel)
    {
    $key[] = array_search($artikel$suche);

    die Positionen der gesuchten Wörter im Array ermitten lassen.


    Nun ist bloß die Frage, wie ich diese entsprechenden Elemente aus dem Array entfernen kann. array_slice(); entfernt ja nur ganze Bereiche von x bis y, ich will ja aber bloß einzelne Elemente entfernen, die nicht unbedingt nebeneinander liegen.

    Wie stell ich das an ?

    Habe
    Hier eine Weile gesucht und die Funktionen durchgeblättert, aber bin auf nichts gestoßen, das mir weitergeholfen hat.

    Danke für eure Hilfe schonmals!

    Gruß,
    Aza

  • #2
    ähm ... warum eleminierst du sie nicht, bevor du sie in einzelne Suchbegriffe zerlegst?

    PHP-Code:

    $suchbegriff 
    str_replace($artikel""$suchbegriff);
    .... 

    Kommentar


    • #3
      Danke erstmal, aber das funktioniert nicht.

      Ich spalte den Sucheingabe-String ja immer zwischen den Leerzeichen auf. Ersetzt man nun aber ein Wort mit nichts im String, dann sind zwischen zwei anderen Wörtern dann 2 Leerzeichen, und dann funktioniert das ganze nichtmehr. :>

      Kommentar


      • #4
        seufz, dann mach doch so:

        PHP-Code:
        $artikel = array("der ""die ""das "); 
        creativ bist du nicht, nicht wahr?

        Kommentar


        • #5
          und selbst wenn du die sperrwörter schon im array hast, dann kannst du sie doch ohne probleme da raus löschen. unset

          Kommentar


          • #6
            Re: Array-Problem

            Original geschrieben von Azadoras
            Nun ist bloß die Frage, wie ich diese entsprechenden Elemente aus dem Array entfernen kann.
            PHP-Code:
            unset($array[$key]) 
            array_search() musst du allerdings in einer while-schleife laufen lassen, falls artikel öfter vorkommen.

            asp2phps vorschlag (falls du diesen weiterverfolgst) ist noch nicht ganz korrekt, z.b. bei suchbegriffen wie "adidas".

            Kommentar


            • #7
              Re: Re: Array-Problem

              Original geschrieben von 3DMax

              asp2phps vorschlag (falls du diesen weiterverfolgst) ist noch nicht ganz korrekt, z.b. bei suchbegriffen wie "adidas".
              aber so schon
              PHP-Code:
              $artikel = array(" der "" die "" das ");
              $suchbegriff str_replace($artikel" "$suchbegriff); 

              Kommentar


              • #8
                Re: Re: Re: Array-Problem

                Original geschrieben von asp2php
                aber so schon
                ich wusste, dass das kommt

                nein, auch nicht, wenn der artikel am anfang steht.

                Kommentar


                • #9
                  Wäre dann eher mit regexp zu lösen. Da würde ich dann aber die stringvariante im array vorziehen.

                  Kommentar


                  • #10
                    Re: Re: Re: Re: Array-Problem

                    Original geschrieben von 3DMax
                    ich wusste, dass das kommt

                    nein, auch nicht, wenn der artikel am anfang steht.

                    Kommentar


                    • #11
                      PHP-Code:
                      $artikel=array("der","die","das");
                      foreach(
                      $string as $k=>$v){
                          if(
                      in_array(strtolower($v),$artikel))
                              unset(
                      $string[$k]);

                      so in der art vielleicht?
                      zwar nicht sehr elegant, aber es funktioniert!

                      Kommentar


                      • #12
                        Mit nem kleinen Fehler, den der TS hoffentlich selbst entdeckt.

                        Kommentar


                        • #13
                          Ich hoffe, ich habe nun nichts falsch verstanden, aber das wäre doch eine ideale Anwendung für array_diff()?

                          Je nach weiterer Anwendung könntest du dir evtl. auch einmal die MySQL-Volltextsuche ansehen.

                          Kommentar


                          • #14
                            OffTopic:
                            dem TS hält das angeblich nicht für geeignet.

                            Kommentar


                            • #15
                              Danke an euch alle für die zahlreichen Vorschläge zur Lösung des Problems.

                              Ich habe es nun wie folgt gelöst, und auf den ersten Blick scheint es auch wie gewollt zu funktionieren:

                              PHP-Code:
                              $forbidden = array('ich''du''er''sie''es''wir''ihr''sie''der''die''das''eine''ein''einer');
                                     
                              $suchbegriff strtolower($suchbegriff);
                                     
                              $suche explode(" "$suchbegriff);

                                     foreach(
                              $forbidden as $f)
                                        {
                                         
                              $key[] = array_search($f$suche);
                                         foreach(
                              $key as $key)
                                            {
                                             unset(
                              $suche[$key]);
                                            }
                                        } 
                              Ich habe auch mal ein paar Titel eingegeben, wo "das" mehrfach drin vorkommt, es scheint also zu langen das array_search da in der foreach-Schleife zu haben. Wüsste auch nich, wie ich das da jez in ne While-Schleife noch reinwursten sollte.

                              Naja, danke euch, das mit dem unset funktioniert jedenfalls. Wenn meine Lösung aber doch noch irgendwelche Lücken/Fehler aufweisen sollte, die mir gerade nicht klar sind, dann wäre ich für deren Aufklärung dennoch sehr dankbar!

                              Kommentar

                              Lädt...
                              X