Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie stringów z tablicy
Forum PHP.pl > Forum > Przedszkole
northwest

Witam serdecznie,
Mam taką tablicę (oryginał ma parę tysięcy wierszy):
  1. (
  2. [0] => 27|2014-03-26 22:03:26
  3. [1] => 18|2014-03-05 10:39:36
  4. [2] => 15|2014-03-26 17:40:17
  5. [3] => 21|2014-03-05 18:04:19
  6. [4] => 18|2014-03-26 22:17:16
  7. )


Wie ktoś może jak można by wyrzucić wszystkie elementy tablicy które mają w nazwie (w pierwszym członie) "18"?

Z góry dziękuję za pomoc,
Northwest
vonski
Przeiterować po tablicy za pomocą zwykłego foreach, albo array_walk, sprawdzić przy pomocy strpos czy string "18" znajduje się na początku elementu i jeśli tak, to za pomocą unset usunąć dany element.
Bardziej wyrafinowanym sposobem będzie użycie np. array_filter i zrobienie praktycznie tego samego co powyżej - przydatne jeśli oryginalna tablica ze wszystkimi wartościami będzie Ci później potrzebna.
northwest
Czy nie będzie problemu w momencie gdy ta tablica będzie miała 7000 rekordów?? smile.gif
vonski
A czy będzie problemem spróbować? smile.gif
Jeżeli elementami tej tablicy są stringi typu "27|2014-03-26 22:03:26" to może sobie ich być i 70 000 wink.gif
Posio
Sprawdź tylko maxymalny czas wykonywania zapytania. Żeby CI w połowie nie sypnęło smile.gif
northwest
Dziękuję bardzo za odpowiedź i pomoc.

tablice mam gotowe, z mysql... Sa poczatkowo w formacie (przykładowo): a:2:{i:1;s:22:"27|2014-03-26 23:24:35";i:2;s:22:"18|2014-03-26 22:17:16";}

zamieniam to sobie na tablicę:

$tablica = unserialize($pr);

i wtedy muszę z tego wyciąć dane okrojone o wybrane wartości (przykładowo te 18)... Problem w tym, że tych rekordów w tablicy jest dużo i nie wiem co będzie wydajne....
vonski
Nadal nie rozumiem niechęci do spróbowania. Płacisz za każde żądanie do serwera? wink.gif
Jeżeli nie wiesz czy będzie to wydajne, to napisz skrypt, uruchom go na docelowym serwerze, na którym będzie stała strona / system i oceń czy zadowala Cię wydajność takiego, czy innego rozwiązania.

Co do powyższego... Zrobiłem test na tablicy zawierającej 100000 (sto tysięcy) elementów takich jak: "98|2012-03-26 22:03:54" (poszczególne człony wygenerowałem sobie wcześniej zwykłym rand()).
Dla zwykłego foreach + strpos + unset czas oscyluje w granicach 0,12 s lokalnie (procesor i5). Na hostingu w Rackspace, procesor bodajże 1 GHz - czas ok. 0,15s. Nie jest tak źle. Z tym że pamiętaj, że ja robiłem test na 100 000 elementów podczas gdy Ty masz ok. 10 000, więc powinno być jeszcze lepiej.
Z array_filter już jest trochę gorzej, lokalnie czas ok 0,6s. Na hostingu nie sprawdzałem, ale zapewne też koło tego.

Jeżeli jednak nadal boisz się wykonać 7000 iteracji, to biorąc pod uwagę, że zanim Twoje dane stają się tablicą, są one w stringu, to może jakoś od tej strony to ugryziesz? Jeżeli np. spodziewasz się, że większość rekordów będzie trzeba i tak odsiać, bo większość z nich zaczyna się od "18", to może można to odfiltrować już na etapie stringa wyrażeniem regularnym. Choć tak szczerze mówiąc, to nie wydaje mi się, żeby regexp był wydajniejszy.
No, ale gdybać sobie można całą noc - trzeba spróbować smile.gif

Generalnie wniosek jest taki, że gdyby PHP miało stawać się wysoko niewydajne dla takiego problemu jak powyżej, to kombajny typu Magento przemielające przy każdym żądaniu zbiory danych w tablicach tablic tablic obiektów, nie miałby racji bytu (tak, nie znoszę Magento wink.gif )
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.