Ankündigung

Einklappen
Keine Ankündigung bisher.

(Verständnis)Problem mit in_array

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

  • (Verständnis)Problem mit in_array

    Ich komme mit dem Vergleich zweier Arrays nicht zurecht. Beispiel:
    PHP-Code:
    $needle = array(
      
    '0' => '1',
      
    '1' => '20',
      
    '2' => '30'
    )
    $haystack = array(
      
    '0' => '1',
      
    '1' => '5',
      
    '2' => '10',
      
    '3' => '12',
      
    '4' => '20',
      
    '5' => '22',
      
    '6' => '23',
      
    '7' => '30',
      
    '8' => '34',
      
    '9' => '125'
    )
    if(
    in_array($needle$haystack))
    {
      echo 
    'true';
    }
    else
    {
      echo 
    'false';

    Ich krieg immer false raus. Ich vermute, irgendwas hab ich da verqueer im Kopf, kann mir jemand bitte auf die Sprünge helfen?
    ----------
    http://www.ninja4ever.de


  • #2
    Du suchst nicht in_array(), sondern array_intersect().

    Kommentar


    • #3
      Moin,

      bei deinem Code prüft in_array ob das Array $needle in $haystack enthalten ist.
      $haystack müsste dafür so aussehen:
      PHP-Code:
      $haystack = array(
        
      '0' => '1',
        
      '1' => '5',
        
      '2' => '10',
        
      '3' => '12',
        
      '4' => '20',
        
      '5' => '22',
        
      '6' => '23',
        
      '7' => '30',
        
      '8' => '34',
        
      '9' => '125',
        
      '10' => = array(
           
      '0' => '1',
           
      '1' => '20',
           
      '2' => '30'
         
      )

      Brauchst du vielleicht eher array_intersect? https://www.php.net/manual/de/functi...-intersect.php
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        Sowas in der Richtung hatte ich schon gedacht, ich kam halt nicht auf die richtige Funktion. Vielen Dank, probier ich sofort aus.
        ----------
        http://www.ninja4ever.de

        Kommentar


        • #5
          Hm, ja nee, das ist es nicht Ich versuchs Mal zu beschreiben.
          Ich hab ein Array mit IDs aus einem Suchformular (gehören zu Krankheiten), das kommt per $_POST.
          In einer Schleife wird nun durch Heilkräuter gegangen und es soll geguckt werden, ob in dem Feld mit dem Fremdschlüssel ALLE Werte aus dem ersten ($_POST)Array enthalten sind.
          Wenn sie alle drin sind, brauch ich nur ein true um dann die ID des Krautes in ein neues Array zu schreiben.
          Zum Schluß sollen alle Kräuter anhand der IDs aus dem produzierten Array gesucht und gelistet werden.
          Im Moment habe ich eine einfache Auswahl im select-Feld des Formulars, es kommt also nur ein Wert an, das geht dann problemlos mit in_array. Ich hätte aber gerne eine Mehrfachauswahl im select-Feld, wodurch dann mehrere Werte ankommen. Und da hilft array_intersect auch nicht weiter ... denk ich.
          ----------
          http://www.ninja4ever.de

          Kommentar


          • #6
            Hört sich für mich so an als sollte man das mit der Datenbank lösen.

            Dennoch ist für dein oben angebenes. Beispiel array_intersec die richtige Wahl:
            PHP-Code:
            <?php
            $needle 
            = array(
              
            '0' => '1',
              
            '1' => '20',
              
            '2' => '30'
            );
            $haystack = array(
              
            '0' => '1',
              
            '1' => '5',
              
            '2' => '10',
              
            '3' => '12',
              
            '4' => '20',
              
            '5' => '22',
              
            '6' => '23',
              
            '7' => '30',
              
            '8' => '34',
              
            '9' => '125'
            );

            $result array_intersect($needle$haystack);
            if(
            $needle === $result)
            {
              echo 
            'true';
            }
            else
            {
              echo 
            'false';
            }
            //Zur Verdeutlichung der Vergleich der beiden Arrays
            var_dump($needle,$result);
            ?>

            Kommentar


            • #7
              Das sieht gut aus, werde ich probieren. Ich hatte jetzt die Idee, die Elemente in beiden Arrays zu zählen, sind sie gleich, sollten ja auch alle da sein, aber das erscheint mir sicherer. Danke sehr.
              Mit der Datenbank gleich lösen geht IMHO nicht, da ich ja erst das Array vom $_POST bekomme und dann die Datenbank durchgehen muss und in jedem Datensatz gucken, ob die Elemente vorhanden sind. Gut, soooo gut bin ich mit MySQL auch nicht, aber ich wüßte nicht, wie man das anstellen sollte.
              ----------
              http://www.ninja4ever.de

              Kommentar


              • #8
                Mit Mysql:
                http://www.mysqltutorial.org/sql-in.aspx

                Kommentar


                • #9
                  Ok, ich hab noch mehr von MySQL vergessen bzw. noch gar nicht gewusst als ich dachte. Ist halt auch nur ein Hobby von mir, wenn ich nichts zu tun hab, sonst fällt mir die Decke auf den Kopp. Hab jetzt nur kurz geguckt, das sieht interessant aus und könnte mein Problem deutlich eleganter lösen. Danke sehr.
                  ----------
                  http://www.ninja4ever.de

                  Kommentar


                  • #10
                    Vielen Dank nochmal, jetzt funktioniert alles, wie ich das wollte. Anzuschauen hier:
                    http://www.ninja4ever.de/e107_plugin...euterkunde.php
                    Sind noch nicht soviele Einträge drin, aber das werden jeden Tag mehr, kommt irgendwann auf 300-400.
                    ----------
                    http://www.ninja4ever.de

                    Kommentar

                    Lädt...
                    X