Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP suchen in Mehrdim. Array

Einklappen

Neue Werbung 2019

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

  • PHP suchen in Mehrdim. Array

    Hallo zusammen

    Zuerst mal - bin mir nicht sicher ob das zum Fortgeschrittenen PHP gehört, falls nein, einfach verschieben und ein fettes sorry von mir.

    Also ich habe hier ein mehrdimensionales assoc. Array - dies gibt gefüllt sowas ähnliches wie dies:

    PHP-Code:
    print_r(array_values($datenarr)); 
    Array ( [0] => Array ( [name] => I7 HC Prozessor Intel [articleId] => 333 [anzahl] => 3 [username] => kevin [price] => 357 ) [1] => Array ( [name] => Testprodukt [articleId] => 445 [anzahl] => 1 [username] => kevin [price] => 14.55 ) )

    Nun, das Skript wird mit div. URL Parameter aufgerufen - unter anderem der nummer 333 oder 445 wie ihr oben sehen könnt.

    PHP-Code:
    function out()
    {
        
    $datenarr $_SESSION['warenkorb']; 
        
    $anz $_GET["amm"];
        
    $arti $_GET["art"];
        echo 
    $anz;
        
    print_r(array_values($datenarr));
        if (
    in_array(array('articleId' => $arti), $datenarr)) { 
            echo 
    "Found!"
        }
        else
        {
            echo 
    "gesucht nach".$arti;
        }
        
    /*HEADER("Location: index.php?kat=cart&ub=&krb=".$anz.""); */
        
    exit();

    Mein Ziel ist es: das Skript soll im Array Datenarr nach $arti suchen, und falls gefunden echo "found" ausgeben...

    Das Problem ist, das es die Zahl nicht findet, obwohl dies der Fall sein müsste.

    Was ich auch noch machen möchte ist, dem Arrayeintrag indem $arti ist, die Anzahl zu untenehmen.

    Falls mir jemand sagen kann wo der Fehler ist wäre ich euch unendlich dankbar.

    Wenn dies funktioniert wird das wahrscheinlich für längere Zeit der letzte Post sein, danach gehts ab zum CSS

    danke

  • #2
    PHP-Code:
    print_r(array_values($datenarr)); 
    Hast du dir mal überlegt, was dir diese Ausgabe bringt, nutze das ganze mal ohne array_values sonst hat das keinerlei sinnvolle Funktion.
    Ansonsten mal die Gleichheit von 2 Arrays dir im Kopf klar machen, was du momentan vesuchst ist das:
    PHP-Code:
    array('id' => 123) == array('id'=> 123 'key' => value
    Falls du es im Kopf nicht schaffst lass dir den Vergleich mal mit PHP machen und verstehe dann was Gleichheit in PHP bedeutet.

    PS: Ja, du bist im falschen Forum
    PS2: Auch wenn ich jetzt nur den kleinen Codeausschnitt sehe, aber ich vermute einfach mal XSS Lücken und falls du SQL benutzt auch hier gravierenede Lücken. Einfach daraus, wie du mit Uservariablen umgehst.

    Kommentar


    • #3
      Ja genau es gibt ja = == und ===

      Also ja das = ist einfach für den Wert übernehmen...

      PHP-Code:
      print_r($datenarr); 
      macht bei mir genau dasselbe, bzw die ausgabe ist gleich..

      Also was ich eigentlich möchte ist:

      Ist kommt im Array bei 'articleID' der Wert $arti vor, aber da haperts
      komme mit mehrdim. Arrays so noch nicht zurecht...

      Kommentar


      • #4
        Zitat von jedimind91 Beitrag anzeigen
        Ja genau es gibt ja = == und ===

        Also ja das = ist einfach für den Wert übernehmen...

        PHP-Code:
        print_r($datenarr); 
        macht bei mir genau dasselbe, bzw die ausgabe ist gleich..

        Also was ich eigentlich möchte ist:

        Ist kommt im Array bei 'articleID' der Wert $arti vor, aber da haperts
        komme mit mehrdim. Arrays so noch nicht zurecht...
        = ist eine Zuweisung eines Wertes an eine Variable
        == ist ein einfacher Vergleich zweier Werte ohne Betracht des Datentypes
        === ist ein Vergleich zweier Werte auf Gelichheit und prüft auch den Datentyp der Werte auf Gleichheit.

        Schau dir im Manual mal die Funktionen für Arrays an. array_walk und co. Auch eine eventuell rekursive Funktion könnte helfen, ich denke aber ist in dem Fall nicht nötig. Ist die Tiefe des Arrays denn Variable und unbestimmt oder ist es eine festgelegte Tiefe in dem sich der gesuchte Wert befinden soll?

        Kommentar


        • #5
          Genau === ist ja wirklich strikt wie sau

          Nein, das Array sieht immer gleich aus:

          ( [0] => Array ( [name] => I7 HC Prozessor Intel [articleId] => 333 [anzahl] => 3 [username] => kevin [price] => 357 )
          Also die Werte sind schon mal länger oder so, aber sonst immer gleich.

          Der Wert soll ind 0 -> Articleid gesucht werden, dann 1 -> etc.

          Danach muss ich noch die anzahl davon sichern und dann unseten.

          Kommentar


          • #6
            So, bin ein Schritt weitergekommen:

            PHP-Code:
            function out()
            {
                
            $anz $_GET["amm"];
                
            $arti $_GET["art"];
                
            $datenarr $_SESSION['warenkorb']; 
                
            $index count $datenarr ); 
                for(
            $dim 0$dim $index$dim++)
                {
                    
            $datenarr $datenarr[$dim];
                    If ( 
            in_array($arti$datenarr) ) 
                    {
                        echo 
            "ID gefunden in Array ".$dim." mit dem Wert".$arti
                    }
                    else
                    {
                        echo 
            "gesucht nach".$arti;
                    }
                }
            exit();

            Nun, das Problem dass ich noch habe ist folgendes:

            Array ( [0] => Array ( [name] => I7 HC Prozessor Intel [articleId] => 333 [anzahl] => 1 [username] => kevin [price] => 119 ) [1] => Array ( [name] => I5 Lynnfield [articleId] => 666 [anzahl] => 1 [username] => kevin [price] => 699 ) ) gesucht nach666
            Notice: Undefined offset: 1 in C:\xampp\htdocs\addtocart.php on line 67

            Warning: in_array() expects parameter 2 to be array, null given in C:\xampp\htdocs\addtocart.php on line 68
            gesucht nach666

            Der Print sehr ihr, also er sagt mir das Array hätte keinen Index 1, was gemäss Print_R aber falsch ist - danach findet er natürlich das Array nicht mehr...

            Könnt ihr mir sagen, wieso er den Index 1 nicht findet?

            Danke vielmals

            mfg

            Kommentar


            • #7
              Genau === ist ja wirklich strikt wie sau
              Was willst du mir bitte damit sagen? Vor allem mit einem blöden Smylie?

              Warum benutzt du denn eine for Schleife? Schon mal foreach angeschaut und probiert und verstanden zu was die Schleife da ist? Da brauchst du nämlich in deinem Fall das ganze Zählgedöns da nicht.

              [EDIT]
              Warum ist das immer noch im Fortgeschrittenen Forum?

              Kommentar


              • #8
                Genau das was da steht, oben wurde gefragt ob ich weiss ob ich die Unterschiede zwischen = == und === kenne, ja kenne ich.

                Wenn dich das Smyle so stört, schliess die Augen.

                Foreach könnte ich noch versuchen, bezweifle zwar dass dies den Fehler beheben kann, aber ein versuch ists wert.

                Kann ich den Beitrag selbst verschieben, wüsste nicht wo.

                Kommentar


                • #9
                  Wenn dich das Smyle so stört, schliess die Augen.

                  Foreach könnte ich noch versuchen, bezweifle zwar dass dies den Fehler beheben kann, aber ein versuch ists wert.
                  Nunja ein grinsender Smylie und die Art der Aussage finde ich an der Stelle schon unpassend, der Ton macht eben die Musik. Ein einfaches "ja ich kenne den Unterschied", hätte an der stelle schon gereicht. Und außerdem du bist der mit dem Problem und suchst Hilfe, dann solltest du dich erst recht zurück nehmen, wir werden hier für Hilfestellung nämlich nicht bezahlt.

                  Warum bezweifelst du irgendwas was du noch nicht probiert hast, ja am Ende vielleicht noch nicht mal weist was es damit auf sich hat?

                  Kommentar


                  • #10
                    Das Problem einer Suche in mehrdimensionalen Arrays lässt sich oft schon besser auf der Datenbankebene lösen.
                    Mit zweidimensionale Arrays arbeite ich mitunter auch, wenn diese einen kleinen Umfag haben.
                    Dann sollte man sich eine kleine Funktion schreiben, die dann auch universell nutzbar ist:
                    PHP-Code:
                    <?php
                    /*
                     * subarray_key_search durchsucht alle subarrays von $array nach einem Schlüssel $key 
                     * wird $key in einem Subarray gefunden, wird der Schlüssel von diesem Subarray geliefert
                     * wird ein $value angegeben, dann wird der Schlüssel nur geliefert, wenn dort der Wert $value vorliegt
                     * wird als $key null angegeben, wird im subarray nach $value unabhängig vom Schlüssel gesucht
                     * false wird geliefert, wenn nichts gefunden wurde
                     */
                    function subarray_key_search(array $array,$key=null,$value null) {
                        foreach(
                    $array as $keya => $subarray) {
                            if( 
                    $key !== null ) {
                                
                    //suche nach Schlüssel
                                
                    if(array_key_exists($key,$subarray)
                                  and 
                    $value === null 
                                  
                    || $value == $subarray[$key]
                                  ) return 
                    $keya;
                            }
                            else {
                                
                    //suche nach Wert
                                
                    if(array_search($value,$subarray)) return $keya;
                            }
                        }
                        return 
                    false;
                    }

                    /*
                     * test
                     */
                    $arr = array(
                      array ( 
                    "name" => "test1",
                             
                    "id" => 333),
                      array ( 
                    "name" => "test2",
                             
                    "id" => 334),
                      array ( 
                    "name" => "test3",
                             
                    "id" => 15),
                    );
                      
                    $key subarray_key_search($arr,'id',334);
                    var_dump($arr[$key]);  // array(2) { ["name"]=> string(5) "test2" ["id"]=> int(334) }
                    $key subarray_key_search($arr,'name','test3');
                    var_dump($arr[$key]);  //array(2) { ["name"]=> string(5) "test3" ["id"]=> int(15) }
                    $key subarray_key_search($arr,null,'333');
                    var_dump($arr[$key]);  // array(2) { ["name"]=> string(5) "test1" ["id"]=> int(333) }  
                    ?>
                    LG jspit

                    Kommentar


                    • #11
                      Der Print sehr ihr, also er sagt mir das Array hätte keinen Index 1, was gemäss Print_R aber falsch ist - danach findet er natürlich das Array nicht mehr...
                      Du setzt in der For-Schleife dein Array auf ein Element des Arrays.

                      Grüße.

                      Kommentar


                      • #12
                        Moinzen

                        Habs gelöst, hab dem "Warenkorb" array in der Schlaufe eine neue Variable gegeben und voila funktionierts auch wieder.

                        Ne andere Frage, gibts ne möglichkeit nach einem Unset das Array wieder neu zu nummerieren?

                        Ist eben dumm wenn ich ne Offset 0 meldung bekommen.
                        Array Merge funzt ja nur für normale arrays...

                        danke

                        Kommentar


                        • #13
                          Wenn ich dich richtig verstehe: array_values.

                          Kommentar


                          • #14
                            Hi,

                            ich lese hier schon eine ganze Zeit anonym mit und habe mich heute auch mal angemeldet.
                            Wieso nutzt ihr für derart einfache Aufgaben nicht einfach die Lösungen, die PHP5 schon von Hause aus mit sich bringt?

                            Die SPL bringt einige nützlich Iteratoren mit, die das rekursive iterieren von Array kinderleicht machen. Unter anderem findet man hier auch die RecursiveArrayIterator Klasse, die genau das macht, was hier in diesem Thema so lange besprochen wurde.

                            Ein praktisches Beispiel zur RecursiveArrayIterator Klasse findet ihr hier.

                            Kommentar

                            Lädt...
                            X