Veröffentlicht 17. Juni 200916 j Hallo, ich habe ein array und lösche einen wert an index = 0. danach fängt mein index bei 1 an. wie kann ich das array irgendwie neu anordnen, dass er wieder bei 0 anfängt, bzw. wenn ich index=3 lösche, dass er dann alle elemente neu indexiert? von 0, 1, 2, 4 wieder zu 0, 1, 2, 3 gruß Alex
17. Juni 200916 j var dump-> 1. vorm löschen und 2. nach dem löschen (mit anfangsindex = 1) array 0 => array 0 => string '1' (length=1) 1 => string 'Audi TT, Baujahr 2008, 255 PS' (length=29) 2 => string '29000.00' (length=8) 3 => int 1 1 => array 0 => string '4' (length=1) 1 => string 'BMW M3 Baujahr 2007, 420 PS' (length=27) 2 => string '88000.00' (length=8) 3 => int 1 anzahl: 1 array 1 => & array 0 => string '4' (length=1) 1 => string 'BMW M3 Baujahr 2007, 420 PS' (length=27) 2 => string '88000.00' (length=8) 3 => int 1 [/PHP] code-> [PHP] if(isset($_POST['loeschen'])) { for($i = 0; $i < count($_POST['loeschen']); $i++) { foreach ($_SESSION['warenkorb'] as &$artikel) { if(in_array($_POST['loeschen'][$i], $artikel { unset($_SESSION['warenkorb'][$i]); } } } echo "anzahl: " . count($_SESSION['warenkorb']); var_dump($_SESSION['warenkorb']);
17. Juni 200916 j eine vorgefertigte sortierfunktion gibt es dafuer nicht siehe: PHP: Sorting Arrays - Manual die frage ist: wofuer brauchst du das? um das ganze mit einer forschleife abzufragen? nehm lieber foreach ansonsten kommst du nich drum herrum das array durchzulaufen und daraus ein neues array zu bilden Ted edit: im uebrigen is das das was ich dir gestern erzaehlt hatte, das du probleme beim loeschen bekommen wirst. solltest dir evtl. wirklich noch einmal den aufbau deines SessionArrays ueberlegen
17. Juni 200916 j da habe ich auch schon geschaut und nichts gefunden. hatte einen denkfehler beim unset-index. zusätzlich musste ich das session-array in ein neues speichern und das wieder zurück in das session-array damit der index wieder stimmt. gefällt mir garnicht das gewusel.
17. Juni 200916 j if(isset($_POST['loeschen']))//-> sind checkboxen! wenn haken, dann löschen { for($i = 0; $i < count($_POST['loeschen']); $i++) { $index = 0; foreach ($_SESSION['warenkorb'] as &$artikel) { //ich übergebe im value der checkboxen die id der artikel //die wiederum im index 0 des artikel-arrays zu finden ist if($artikel[0] == $_POST['loeschen'][$i]) { unset($_SESSION['warenkorb'][$index]); $neuesArray = array(); $y = 0; foreach ($_SESSION['warenkorb'] as &$artikelSortiert) { $neuesArray[$y] = $artikelSortiert; $y++; } $_SESSION['warenkorb'] = $neuesArray; } $index++; } } } [/PHP] habe auch für die checkboxen eine foreach-schleife getestet, hat aber nicht funktioniert, deshalb habe ich es erstmal wieder rückgängig gemacht. hab jetzt keinen kopf mehr für den kram!
17. Juni 200916 j Das sortieren solltest du natuerlich nicht in der loesch routine machen sondern danach und damit geht das auch ganz einfach: /* leere indexe auffuellen */ $tmpArray = array(); foreach ($_SESSION['warenkorb'] as $artikel) { $tmpArray[] = $artikel; } $_SESSION['warenkorb'] = $tmpArray; [/PHP] aber wie gesagt... eigentlich solltest dir der index auch egal sein koennen.. koenntest das mit der loeschroutine auch so loesen koennen: [PHP]if(isset($_POST['loeschen']))//-> sind checkboxen! wenn haken, dann löschen { foreach($_POST['loeschen'] as $loeschArtikel) { foreach ($_SESSION['warenkorb'] as $key => $artikel) { if($artikel[0] == $loeschArtikel) { unset($_SESSION['warenkorb'][$key]); } } } } Ted
18. Juni 200916 j wenn ich es danach sortiere, funktioniert es wieder nicht! habe es nach der foreach, nach der for und nach if sortieren lassen. immer falsches ergebnis Bearbeitet 18. Juni 200916 j von alexC++
18. Juni 200916 j wenn ich z.B. drei artikel im warenkorb habe und das erste lösche, steht dann das was ich lösche 2 mal drin und die andern 2 nicht mehr. so in der richtung. ich kann dir das ding mal schicken, wenn du magst. ich muss weiter machen, da ich morgen das projekt abgeben muss
18. Juni 200916 j wenn du dich damit bis heute abend (~19 uhr) gedulden kannst?! da kann ich mir das dann mal in ruhe angucken
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.