Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Usuwanie stringów z tablicy
northwest
post 26.03.2014, 22:28:15
Post #1





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----



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
Go to the top of the page
+Quote Post
vonski
post 26.03.2014, 22:38:03
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
Go to the top of the page
+Quote Post
northwest
post 26.03.2014, 23:26:24
Post #3





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


Czy nie będzie problemu w momencie gdy ta tablica będzie miała 7000 rekordów?? smile.gif
Go to the top of the page
+Quote Post
vonski
post 26.03.2014, 23:40:30
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ć? 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


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
Posio
post 27.03.2014, 00:23:43
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 smile.gif
Go to the top of the page
+Quote Post
northwest
post 27.03.2014, 21:27:00
Post #6





Grupa: Zarejestrowani
Postów: 788
Pomógł: 1
Dołączył: 17.09.2004

Ostrzeżenie: (10%)
X----


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....
Go to the top of the page
+Quote Post
vonski
post 27.03.2014, 22:24:06
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? 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 )


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post

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: 29.06.2025 - 17:51