Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Usuwanie pierwszego elementu tablicy?, jednak array_shift() rozburza mi klucze
kukix
post 6.07.2012, 13:36:30
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.

Mam tablice generowaną automatycznie, jednak potrzebuje, żeby nie miała ona więcej niż 5 elementów.

Podczas dodawania elementu do tablicy sprawdzam, czy ma powyżej 5 elementów i jeżeli ma to kasuje je funkcją array_shift();

Po ciężkiej walce okazało się, że array_shift() modyfikuje mi klucze pozostałych tablic...

W jaki sposób mogę kontrolować czy tablica ma 5 elementów.. i kasować najstarszy?
Myślałem o pętli foreach(), ale może jest jakis wbudowany w php mechanizm?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post 6.07.2012, 16:35:56
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To normalne zachowanie z limitem. Unset dostaje bowiem konkretny, jeden, klucz i go usuwa. Koszt resetowania, pobierania pierwszego klucza i usuwania jest w miarę wysoki, ale zawsze tak samo przebiega, stąd długość tablicy nie ma dla niego znaczenia. Zawsze wytnie pierwszy i koniec.

Z kolei im większy offset i długość wycinanego kawałka, tym dłużej array_slice przechodzi po kluczach kolejnych i czas mu rośnie.
Całość jednak nieco inaczej by wyglądała, gdyby tablica wejściowa na wstępie była dowolnej długości i już na wstępie mogła mieć zarówno 1 jak i 40 elementów. O ile samo działanie nadal byłoby identycznie szybkie, o tyle doszła by Ci bowiem wstępna obróbka dla kodu z resetem jako "inicjalizacja", tak, by usunąć tyle elementów z przodu, by Ci zostało góra 4 elementy. Array_slice wystarczy leciutko jedynie zmodyfikować. Zamiast
  1. $temp = array_slice($temp, 1, 4, TRUE);

wstawia się bowiem
  1. $temp = array_slice($temp, -4, 4, TRUE);

co zawsze wycina maksymalnie 4 ostatnie elementy tablicy. Oczywiście nadal koszt się zwiększa z wycinanym kawałkiem, ale przestajesz się martwić czy dostarczona tablica jest pusta, ma 2 czy 5000 elementów.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 11.08.2025 - 06:58