Czy moge usunac element z tablicy w czasue wykonywania petli?

0

Witam,

Czy takie usuwanie elementu z pamieci jest ok? Tablica $users jest mega duza i chce jak najszybciej uwolnic jak najwiecej pamieci. Czy to jest dobry pomysl?

foreach ($users as $key => $user) {
    // jakas czynnosc

    unset($users[$key]);
}
0

Coś robisz źle. Skąd się biorą dane w zmiennej $users?

0

Z zapytania SQL.

1

Nie musisz wrzucać całej zwrotki zapytania do pamięci - możesz iterować po jednym rekordzie; w jaki sposób pobierasz te dane?

0

I ile tam tego jest? Ile to zajmuje w MB? Chce się upewnić, czy nie robisz jakiś mikro optymalizacji.

Jeżeli faktycznie masz z tym problem, to możesz użyć tego: Speeding up database calls with PDO and iterators.

1

@poniatowski odpowiadaj w postach, proszę. Nie ma tutaj rozwiązania na zasadzie "one to rule them all". Zależy od sytuacji. Jak czytasz z bazy, to można użyć iteratorów. Jak czytasz tych userów z pliku csv, to też można czytać linijka po linijce.

Jeżeli chodzi o API, to możesz pobierać chunkami. Na przykład po 100 użytkowników. Możesz mieć jeden proces, który pobiera tych userów, a inny może sobie coś tam z nimi robić i możesz to spiąć jakimś rabbitmq.

0

@Desu: ok, usunte w takim razei unset. Dzieki.

0

unset nie zawsze działa, jesli by ci nie działał to są inne sposoby np iteracja zwykłym forem od tyłu i zastosowanie array_slice. Inna sprawa czy to czysty php czy może jednak jakiś framework gdzie np dostajesz nie tablice a kolekcje?

0

@mr_jaro: Czysty PHP. Nie ma collection czy innych postaci przechowywania danych. Dzialac dziala. Usuwa mi element i przeskakuje do nastepnego. Wszystko jest ok, ale mam wrazenie, ze to w sumie nawet nie powinno dzialac albo wczesniej czy pozniej sie rozlozy przy innym zestawie danych. Tak czy siak usunalem unset troche czuje, ze to stapanie po cienkim lodzie.

1

Czemu nie powinno? Powinno i działa.

Understanding PHP's internal array implementation

Czy powinieneś tak robić? Raczej nie. Czy jest taka potrzeba? Zdecydowanie nie.

"Premature optimization is the root of all evil."

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0