![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
Witam serdecznie, Mam taką tablicę (oryginał ma parę tysięcy wierszy):
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 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 292 Pomógł: 89 Dołączył: 27.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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. Ten post edytował vonski 26.03.2014, 22:40:44 -------------------- Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
Czy nie będzie problemu w momencie gdy ta tablica będzie miała 7000 rekordów??
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 292 Pomógł: 89 Dołączył: 27.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A czy będzie problemem spróbować?
![]() Jeżeli elementami tej tablicy są stringi typu "27|2014-03-26 22:03:26" to może sobie ich być i 70 000 ![]() -------------------- Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 417 Pomógł: 44 Dołączył: 23.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź tylko maxymalny czas wykonywania zapytania. Żeby CI w połowie nie sypnęło
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) ![]() ![]() |
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.... |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 292 Pomógł: 89 Dołączył: 27.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie rozumiem niechęci do spróbowania. Płacisz za każde żądanie do serwera?
![]() 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ć ![]() 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 ![]() -------------------- Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 29.06.2025 - 17:51 |