Mam tablicę:
$array = array(1,2,3,4,5);
Gdybym zrzucił zawartość tablicy, wyglądałyby tak:
array(5) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Kiedy przechodzę przez pętlę i rozbrajam określone klawisze, indeks zostaje podniesiony.
foreach($array as $i => $info)
{
if($info == 1 || $info == 2)
{
unset($array[$i]);
}
}
Następnie, jeśli zrobiłbym teraz kolejny zrzut, wyglądałoby to tak:
array(3) {
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Czy istnieje właściwy sposób na zresetowanie tablicy, aby elementy były ponownie zerowane?
array(3) {
[0] => int(3)
[1] => int(4)
[2] => int(5)
}
Mam inną interesującą metodę:
Teraz klucze tablicy $ zostały zresetowane.
źródło
Użyj
array_splice
zamiastunset
:Próbka robocza tutaj .
źródło
foreach
pętli. Użyj standardui Loop
i po prostu zresetuj i po spawaniu. RównieżWorking sample here.
nie działa.Po prostu dodatek.
Wiem, że to stare , ale chciałem dodać rozwiązanie. Nie widzę, że sam wymyśliłem. Znalazłem to pytanie podczas poszukiwania innego rozwiązania i po prostu pomyślałem: „Cóż, póki tu jestem”.
Przede wszystkim odpowiedź Neala jest dobra i świetna do użycia po uruchomieniu pętli, jednak wolę wykonywać całą pracę na raz. Oczywiście w moim konkretnym przypadku musiałem wykonać więcej pracy niż ten prosty przykład tutaj, ale metoda nadal obowiązuje. Widziałem, gdzie kilka innych sugerowało
foreach
pętle, jednak nadal pozostawia to po pracy ze względu na naturę bestii. Zwykle sugeruję prostsze rzeczyforeach
, ale w tym przypadku najlepiej pamiętać staroświeckąfor loop
logikę. Po prostu użyji
! Aby zachować odpowiedni indeks, po prostu odejmiji
po każdym usunięciu elementu Array.Oto mój prosty, działający przykład:
Wyjdzie:
Może to mieć wiele prostych implementacji. Na przykład mój dokładny przypadek wymagał przechowywania najnowszego elementu w tablicy na podstawie wartości wielowymiarowych. Pokażę ci, co mam na myśli:
Wyjdzie:
Jak widzisz, manipuluję $ i przed połączeniem, próbując usunąć poprzedni, a nie obecny przedmiot.
źródło
Późna odpowiedź, ale po PHP 5.3 może tak być;
źródło
Lub możesz stworzyć własną funkcję, która przekazuje tablicę przez odniesienie.
Więc wszystko, co musisz zrobić, to ...
... a teraz
$array
nie ma wartości, które umieściłeś,$unsets
a klucze zostały zresetowaneźródło
100% pracuje dla mnie! Po rozbrojeniu elementów w tablicy możesz użyć tego do ponownego indeksowania tablicy
źródło
Używam
$arr = array_merge($arr);
do zmiany podstawy tablicy. Prosty i bezpośredni.źródło
W mojej sytuacji musiałem zachować unikalne klucze z wartościami tablic, więc właśnie użyłem drugiej tablicy:
źródło
unset($arr1)
który sprawi, że NIE będzie można iterować w pętli. 2) Brakuje średnika w wierszu od drugiego do ostatniego. Ten fragment kodu nie będzie działać.