Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usunięcie z ciągu powtarzających się wartości
Forum PHP.pl > Forum > PHP
Michael2318
$test = '1, 2, 3, 1, 3, 5, 6';

Jak z powyższego ciągu znaków wyrzucić po jednej jedynce i trójce, tak aby efekt był następujący:

$test = '1, 2, 3, 5, 6';

? Przekopałem całe google, ale w sumie nic sensownego tam nie znalazłem, a sam nie mam zielonego pojęcia jak się za to w ogóle zabrać.
jeremiash
no to dam Ci podpowiedź, a funkcje sobie znajdzesz smile.gif

Ja bym kolejne liczby wpisał w tablicę a potem je porównywał przy użyciu pętli zapisując do drugiej tablicy. Potem ewentualnie znów tworzył ciąg...
r4xz
  1. $array = array_unique( explode(", ", $test) );
cudny
Cytat(r4xz @ 11.12.2012, 17:22:37 ) *
  1. $array = array_unique( explode(", ", $test) );


http://php.net/manual/en/function.array-unique.php#98453


  1. $arr = explode(',',$test);
  2. $res = array();
  3. foreach($arr as $a) {
  4. $res[$a] = $a;
  5. }
  6. echo '<pre>'; print_r($res);
r4xz
@cudny, dziękuje za radę, ale i tak w większości przypadków ją "oleje" smile.gif
po prostu nie widzę sensu przejmowaniem się wydajnością jeśli wykonuje daną operacje tylko kilka razy, a strona jest robiona dla małej/średniej firmy/grona (niezauważalna różnica wtedy) - tam po prostu czytelność kodu się liczy (oczywiście nie wymieniam tych najważniejszych aspektów jak bezpieczeństwo etc.)
cudny
Powodzenia
irmidjusz
@cudny: to jest wpis z 2010 roku, w obecnej implementacji PHP wyniki mogą być inne. Po drugie, sprawy optymalizacji wydajności mają znaczenie wtedy, gdy profilowanie wykaże, że mają znaczenie, a nie wtedy, gdy się komuś wydaje, że mają, bo w jakichś-tam warunkach, dla jakichś-tam danych, coś jest szybsze od czegoś smile.gif Nie mówiąc już o tym, że jeśli kolega r4xy ma do przefiltrowania tablicę choćby nawet 1000 elementową, to array_unique w niczym nie będzie gorsze od foreach.

A przy okazji, można to też zrobić używając array_flip.

W ogóle mam czasami wrażenie, że niektórzy nabawili się jakiegoś skrzywienia, takiego anty-wzorca psychologiczno-programistycznego, o nazwie Performance Obsession smile.gif Co skutkuje zwykle pisaniem (niepotrzebnie) koszmarnego kodu w imię "szybkości" i "minimalizacji użycia pamięci".
cudny
Jaja sobie robisz... zrób normalnie sobie microtime(1) to będziesz wiedział.
A co do tego, że jest to nieczytelne to chyba kpisz !
Mamy 21 wiek i istnieje model obiektowy, no nie ? Wrzuć metodę w klasę, lub choćby stwórz funkcję.
A napisz mi jeszcze, co się wiąże z bezpieczeństwem, bo to też wymieniłeś ?

Ogólnie funkcja array_unique jest nie wydajna i pomylona, sprawdzaj jak chcesz i pisz co uważasz.
Nie potrafisz się przyznać do błędu, którego wcale nie chciałem Ci wytknąć, bo nie do Ciebie odnosił się post, po prostu Cię poprawiłem.

--
Dziękuję za uwagę, czytał Lucjan Szołajski
r4xz
Cytat(cudny @ 12.12.2012, 00:11:13 ) *
A napisz mi jeszcze, co się wiąże z bezpieczeństwem, bo to też wymieniłeś ?

przeczytaj jeszcze raz mój post

Cytat(cudny @ 12.12.2012, 00:11:13 ) *
Nie potrafisz się przyznać do błędu

nie popełniam błędu, a za radę podziękowałem... chłopie, spokojnie!

Cytat(cudny @ 12.12.2012, 00:11:13 ) *
Ogólnie funkcja array_unique jest nie wydajna i pomylona, sprawdzaj jak chcesz i pisz co uważasz.

więc sprawdziłem dla sytuacji w jakiej jej używam (tablica max 30 elementowa)
deduped to 30 in 9.7990036010742E-5
deduped to 30 in 4.6014785766602E-5

więc po co śmietnik robić dla nowych niepotrzebnych w danym projekcie klas? będę musiał użyć tego w "masowej" skali to wtedy stworzę, tak to trochę jak głową o beton. irmidjusz miał tutaj rację z "Performance Obsession"

podsumowując: dla autora postu zarówna jedna jak i druga metoda będzie równie skuteczna i wydajna, pod warunkiem że nie planuje "czegoś większego" - wtedy musi już wybrać tą poprawioną wersję.

PS po tym nic nie wnoszącym poście "Powodzenia" odechciało mi się słuchać twoich rad, jakoś to zabrzmiało w stylu "bo ja mam zawsze rację" - wolę jak ktoś podaje konkrety w liczbach/kodzie tak jak to zrobiłeś we wcześniejszym poście smile.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.