array aufteilen

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

  • array aufteilen

    Hallo!

    Gibt es eine einfache Möglichkeit eine Array ab einer bestimmten Position aufzuteilen?

    $foo = array(
    'aa' => 'bmw',
    'bb' => 'audi',
    'cc' => 'opel',
    'dd' => 'Benz',
    'ee' => 'Toyota',
    'ff' => 'Corsa',
    'gg' => 'Skoda',
    'hh' => 'Volvo',
    'ii' => 'Seat',
    'jj' => 'Fiat',
    'kk' => 'Vw',
    'll' => 'Kia'
    );

    Nun möchte ich zu einem die Paramter VOR dem 'hh' => 'Volvo' und NACH dem einsammeln. Ich suche nach einer array Function, gibt es sowas.

    Lösungsansatz:

    PHP-Code:
            foreach ($foo as $code => $name) {
                if (
    $code !== 'hh') {
                    
    $foo1[] = array(
                        
    'type' => $name,
                        
    'code' => $code
                    
    );
                } else {
                    break;
                }
            } 
    Problem, wie bekomme ich die Daten nach dem key 'hh'?

    Danke

  • #2
    Steht 'hh' immer an der gleichen Position? Dann wäre array_slice() denke ich die einfachste Variante.
    This is what happens when an unstoppable force meets an immovable object.

    Kommentar


    • #3
      Hi!

      Leider nicht, die Position sind unterschiedlich!

      LG

      Kommentar


      • #4
        Dann zuerst nach der Position suchen (PHP: array_search - Manual) und dann obiges...


        Edit: Argh! Die Hitze bringt mich noch um! Verzeiht! *g*
        Man kann die Position auch ermitteln wenn man das Array einmal bis zu der Stelle durchläuft. Macht aber keinen Sinn, wenn du sowieso alles haben willst, dann kann man das auch alles in einem Durchlauf machen.
        Zuletzt geändert von medium22; 06.07.2011, 16:44.

        Kommentar


        • #5
          array_search gibt aber doch den 'key' des gesuchten Elements zurück. D.h. in dem Fall kommt 'hh' als Ergebnis zurück und das bringt ja nicht wirklich was...
          This is what happens when an unstoppable force meets an immovable object.

          Kommentar


          • #6
            @medium

            *kopfkratz* - array_search liefert den Schlüssel für einen Wert im Array - den kennt er ja bereits. Für array_slice bräuchte er jedoch die Position des key-value-Paares im Array. Die bekommt er mit array_search nicht.

            Da mir auf Anhieb keine "elegante" Lösung mit den Array-Funktionen einfällt:

            PHP-Code:
                    $part "before-hh";
                    foreach (
            $foo as $code => $name) {
                        
                        if (
            $code == 'hh') {
                             
            $part "after-hh";
                        } 
                        
            $fooNew[$part][] = array(
                                
            'type' => $name,
                                
            'code' => $code
                            
            );

                    } 
            Quick&Dirty sowie ungetestet.
            Zuletzt geändert von Quetschi; 06.07.2011, 16:38.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              So, hab mal was gebastelt... Ist einfach ne Kombination aus den verschiedenen Array-Funktionen


              PHP-Code:
              $hh_index array_search('hh'array_keys($array));
              $before_hh array_slice($array0$hh_index);
              $after_hh array_slice($array$hh_index 1); 
              Code:
              $before_hh = Array ([aa] => bmw, [bb] => audi, [cc] => opel, [dd] => Benz, [ee] => Toyota, [ff] => Corsa, [gg] => Skoda)
              $after_hh = Array([ii] => Seat, [jj] => Fiat, [kk] => Vw, [ll] => Kia)
              Wenn du den 'hh' index noch dabei haben willst, musst du entweder die +1 wegmachen oder beim anderen hinzufügen. Wie das ganze funktioniert ist denke ich ersichtlich...

              array_keys liefert alle keys zurück, und zwar in der reihenfolge, wie sie im array vorhanden sind. Daher kann ich darin dann nach dem 'hh' key suchen und erhalte dementsprechend die Position von 'hh' im alten Array als Integer. Den kann ich dann für array_slice ganz normal nutzen.

              Etwas "von hinten durchs Knie", aber es klappt, egal wo 'hh' steht.
              Zuletzt geändert von ApoY2k; 06.07.2011, 16:53.
              This is what happens when an unstoppable force meets an immovable object.

              Kommentar


              • #8
                Zitat von ApoY2k Beitrag anzeigen
                Etwas "von hinten durchs Knie", aber es klappt, egal wo 'hh' steht.
                Oder von hinten durch die Brust ins Auge

                Ne - ist deutlich besser als der Vorschlag von mir

                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  1 cannon fired, 0.732 sparrows dead.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Kommt da noch mehr oder soll mir das einfach sagen, dass ich mal wieder Mist zusammenprogrammiert hab?
                    This is what happens when an unstoppable force meets an immovable object.

                    Kommentar


                    • #11
                      Das war weniger Kritik an deinem Vorschlag, als am kompletten Vorgehen ...

                      Ggf. kann man die Unterscheidung auch einfach bei der Verarbeitung der Daten machen o.ä. - aber etwas mehr sinnvolle Hintergrund-Infos zum Vorhaben hat der Frager ja wieder mal nicht geliefert
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Ja gut, das stimmt wohl.

                        Aber wer weiß woher die Daten kommen...
                        This is what happens when an unstoppable force meets an immovable object.

                        Kommentar


                        • #13
                          Ich hab das editing meines Posts dahingehend wieder abgebrochen, als ich den Vorschlag von @ApoY2k per Mail reinkommen sehen hab. Der Aufbau des Arrays kam mir auch ziemlich fragwürdig vor.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar

                          Lädt...
                          X