Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Tablica - unikalne ścieżki ale nie do końca
lolek92
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 12.07.2008

Ostrzeżenie: (0%)
-----


Witam wszystkich,

Mam problem z wyciągnięciem z tablicy unikalnych ścieżek.

Tablica wygląda przykładowo:
  1. <?php
  2. (
  3.    [0] => 31
  4.    [1] => 31.1
  5.    [2] => 31.1.17
  6.    [3] => 31.1.17.18
  7.    [4] => 31.2
  8.    [5] => 31.2.13
  9. )
  10. ?>


oczywiście nie zawsze najdłuższa ścieżka jest na dole,
chcę aby pozostały tylko najdłuższe ścieżki, czyli:

  1. <?php
  2. (
  3.    [0] => 31.1.17.18
  4.    [1] => 31.2.13
  5. )
  6. ?>


Próbowałem array_unique i funkcji z forum, ale nie działają prawidłowo.

Proszę was o pomoc, z góry dziękuje wszystkim za chęci.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Łukasz O.
post
Post #2





Grupa: Zarejestrowani
Postów: 191
Pomógł: 5
Dołączył: 13.01.2007

Ostrzeżenie: (0%)
-----


linia 20: if( strpos( $klucz, $wartosc.'.' ) === 0 ){ // dodajesz kropkę, aby potwierdzić, że to podciąg rodzica

@Pr0100 nie chce mi się robić testów wydajnościowych, bo to gruba przesada będzie, ale zwróć uwagę na to, iż:
1) sortowanie wyniku nie ma nic do rzeczy, bo i tak obaj nie zachowujemy porządku kluczy,
2) robisz dokładnie to samo co ja, ale niepotrzebnie komplikując kod
3) Twój skrypt działa niepoprawnie:
moje dane wejściowe, Twoja funkcja, wynik:
array ( 0 => '1.1.11', 1 => '31.1.17.18.24.56', 2 => '31.2.13', 3 => '1.1.1', 4 => '31.1.17.18.24.56.78.12', )

wartość pod kluczem 1 jest podciągiem 4

mały test: http://pastebin.com/f2d4bbd26
moja wersja jest przeszło 2x szybsza

poprawiona wersja
  1. <?php
  2. $tab = array(
  3.    '1.1.11',
  4.    '31',
  5.    '31.1',
  6.    '31.1.17.18',
  7.    '31.1.17.18.24',
  8.    '31.1.17',
  9.    '31.1.17.18.24.56',
  10.    '31.2',
  11.    '31.2.13',
  12.    '1.1.1',
  13.    '31.1.17.18.24.56.78.12',
  14. );
  15. rsort($tab);
  16.  
  17. $wynik = array($tab[0]);
  18.  
  19. $ilosc = count($tab);
  20. for($i = 0; $i < $ilosc; $i++){
  21.    $t1 = explode('.',$tab[$i]);
  22.    $t2 = explode('.',$tab[$i+1]);
  23.    $test = array_diff_assoc($t2,$t1);
  24.    $test = !empty($test);
  25.    if( isset($tab[$i+1]) && $test ){
  26.        $wynik[] = $tab[$i+1];
  27.    }
  28. }
  29. var_export($wynik);
  30. ?>


KU PAMIĘCI

Ten post edytował Łukasz O. 24.06.2009, 20:52:38
Go to the top of the page
+Quote Post

Posty w temacie
- lolek92   [PHP] Tablica - unikalne ścieżki ale nie do końca   24.06.2009, 16:01:28
- - erix   Typuj wszystkie wartości na string.   24.06.2009, 16:04:57
- - lolek92   Ale w jakim sensie, bo nie rozumiem? Jeżeli ścież...   24.06.2009, 16:07:26
- - thomas2411   Traktuj wartości z tabeli jako stringi. Poczytaj s...   24.06.2009, 16:14:09
- - lolek92   Nie wiem o co wam chodzi, może źle napisałem bo ja...   24.06.2009, 16:33:04
- - erix   No to ciepło szukasz. [PHP] pobierz, plaintext ...   24.06.2009, 16:37:34
- - lolek92   żeby wyciągnąć pierwszą literę to $zmienna[0]...   24.06.2009, 16:41:04
- - erix   No i ok, nienajgorzej. Ale:liczbę wpisów w tablic...   24.06.2009, 16:49:15
- - lolek92   No dobra ale jak to porównywać bo jak na razie to ...   24.06.2009, 16:59:35
- - erix   Hmm, to chciałeś w końcu wyciągać najdłuższe, czy ...   24.06.2009, 17:00:48
- - lolek92   no chcę wyciągnąć najdłuższe ścieżki ale które się...   24.06.2009, 17:18:31
- - erix   To array_unique" title="Zobacz w manualu PHP" targ...   24.06.2009, 17:21:52
- - lolek92   no ale właśnie nie działa chyba że da rady jakieś ...   24.06.2009, 17:27:56
- - Pr0100   [PHP] pobierz, plaintext <?php$temp = $values =...   24.06.2009, 17:53:29
|- - lolek92   Pr0100 dzięki wielkie na takie coś to bym nigdy ni...   24.06.2009, 18:08:34
- - Łukasz O.   i po co takie zamotanie? [PHP] pobierz, plaintext...   24.06.2009, 18:32:22
- - Pr0100   Cytati po co takie zamotanie? 1. Wydajność 2. Bra...   24.06.2009, 18:56:26
- - lolek92   Łukasz O. dzięki, widzę że s...   24.06.2009, 18:58:00
- - Łukasz O.   linia 20: if( strpos( $klucz, $wartosc....   24.06.2009, 22:38:43
- - Pr0100   CytatTwoja funkcja, wynik: array ( 0 => '1....   24.06.2009, 23:13:36
- - Łukasz O.   walka na kod nigdy nie jest próżna - pomaga w rozw...   25.06.2009, 09:21:47


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 15:40