Rainer: Array neu durchnummerieren

Hallo,

in meiner Session habe ich das Array VKP mit folgendem Aufbau:

Array ( [1] =>
Array ( [0] => 1 [1] => 1 )

[2] =>  
Array ( [0] => 2 [1] => 1 )  
  
[3] =>  
Array ( [0] => 2 [1] => 1 )  

)

Nun löschen ich mit unset($_SESSION["VKP"][2] genau dieses aus dem Array "VKP".
Als Folge davon muss ich das Array "VKP" neu durchnummerieren, also aus [3] muss [2] werden.

Falls vorhanden [4] wird [3] usw.

Wie kann ich "VKP" durchlaufen und die Nummern neu setzen?

Gruß Rainer

  1. Hallo!

    Wie kann ich "VKP" durchlaufen und die Nummern neu setzen?

    Foreach?

    Liebe Grüße aus Norddeutschland.

    --
    ie:{ fl:( br:> va:} ls:[ fo:| rl:? n4:~ ss:) de:> js:| ch:? sh:( mo:) zu:)
  2. Hi!

    Nun löschen ich mit unset($_SESSION["VKP"][2] genau dieses aus dem Array "VKP".
    Als Folge davon muss ich das Array "VKP" neu durchnummerieren, also aus [3] muss [2] werden.

    Warum "muss"?

    Wenn du wirklich musst, dann liefert die Funktion array_values() alle Werte ohne die Schlüssel zu berücksichtigen. Als Folge dessen bekommst du neue fortlaufende Schlüssel.

    Lo!

  3. Wie kann ich "VKP" durchlaufen und die Nummern neu setzen?

    Mit array_splice() nichts im Array ersetzen sollte die Keys neu nummerieren - das geht aber sicher auch billiger.

  4. Hallo nochmal,

    irgendwie raff ich es heute überhaupt nicht.

    Habe allerdings auch vergessen dazuzuschreiben das ich das komplatte Array "VKP" wieder mit den neuen Werten in die Session zurückschreiben möchte.

    Also einlesen
    [1] bleibt [1]
    [3] wird [2]
    [4] wird [3]
    ... usw.

    Kapier es einfach nicht wie ich das anstellen soll.

    Gruß Rainer

    1. Hallo Rainer,

      Kapier es einfach nicht wie ich das anstellen soll.

      welches konkrete Problem hast Du beim Umsetzen der Lösungsvorschläge von suit oder dedlfix?

      Freundliche Grüße

      Vinzenz

      1. Hi!

        Kapier es einfach nicht wie ich das anstellen soll.
        welches konkrete Problem hast Du beim Umsetzen der Lösungsvorschläge von suit oder dedlfix?

        Zusatzfrage: Welches konkrete Problem soll überhaupt mit dem Neunummerieren gelöst werden?

        Lo!

    2. »» irgendwie raff ich es heute überhaupt nicht.

      [x] Scheint nicht Dein Tag zu sein.
      [x] Möglicherweise hast Du an anderer Stelle ein schlechtes  Programmdesign , denn obwohl die Schlüssel des Arrays offensichtlich keine Bedeutung haben willst (oder musst) Du sie neu setzen. Das ein gutes Beispiel dafür, dass man einen Array nach Möglichkeit nicht mit sowas wie
          for ($i=1, $i<count(array); $i++) { foo, bar }
      durchhechelt.

      »» Habe allerdings auch vergessen dazuzuschreiben das ich das komplatte Array "VKP" wieder mit den neuen Werten in die Session zurückschreiben möchte.

      Hm. Bitte ... der folgende Code sieht nur zufällig wie PHP aus.

      /*  
      Du nimmst Dir einen neuen Array, eine Hilfsvariable und noch einen leeren Array für die alten Keys und eine Variable für die Schlüsselwerte  
      */  
        
      $tmp=array();  
      $i=0;  
      $arKeys=array();  
      $key=0;  
        
      /*  
      Aus einem "Grund" ist Dein erstes Element (Nr. 0) scheinbar nicht gesetzt... Demnnach können wir nicht einfach den Array durchhecheln...  
      Wir brauchen die keys von Deinem Array:  
      */  
        
      $arKeys=array_keys($_SESSION['VPK']);  
        
      /*  
      Für jeden  Key:  
      */  
      foreach ($arKeys as $key) {  
        # Wir schreiben den Array aus $_SESSION['VPK'][$key] in den neuen Array;  
        # Du beginnst ja bei 1, deshalb das "++$i":  
        $tmp[++$i]=$_SESSION['VPK'][$key];  
      }  
        
      /*  
      Und jetzt wird der Array $tmp Dein neuer $_SESSION['VPK']:  
      */  
      $_SESSION['VPK']=$tmp;  
        
      /*  
      Fast fertig! Wer spielt muss auch aufräumen:  
      */  
      unset($tmp, $i, $key, $arKeys);
      
      1. Hi!

        Hm. Bitte ... der folgende Code sieht nur zufällig wie PHP aus.

        Was gefällt dir denn an einem Einzeiler mit array_values() nicht?

        Lo!

        1. Moin!

          Hm. Bitte ... der folgende Code sieht nur zufällig wie PHP aus.
          Was gefällt dir denn an einem Einzeiler mit array_values() nicht?

          [1] Die Dokumentation zu der nur zufällig wie PHP aussehenden Programmiersprache kennt in zumindest in der aktuellen Version keine Funktion array_values().

          :)

          [2] Die Dokumentation der in PHP vorhandenen Funktion array_values() behauptet, dass das erste Element den key 0 bekommt.

          Rainer sah aber eine 1 als ersten Key vor.

          ;(

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

          1. Rainer sah aber eine 1 als ersten Key vor.

            Ich darf das aus dem Ausgangsposting mal ordentlich einrücken und gebe dir hier recht:

            Array (
              [1] => Array ( [0] => 1 [1] => 1 )
              [2] => Array ( [0] => 2 [1] => 1 )
              [3] => Array ( [0] => 2 [1] => 1 )
            )

            Damit schlägt natürlich auch mein vorschlag fehl, da auch hier der Index bei 0 beginnt.

            Mit foreach das Array durchackern ist vermutlich die sinnvollste Lösung für die Aufgabenstellung - wohlgemerkt nicht das Problem, das liegt wie schon festgestellt wurde tiefer.