Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Duplikaty linków
Qbexus
post 12.07.2006, 19:38:23
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


To mój pierwszy post, więc witam wszystkich.
Gromadzę linki do katalogu tematycznego i utknąłem na narzędziu do zbierania sortowania i weryfikacji linków.
Zrobiłem kasowanie duplikatów w txt na array_unique ale niestety to nie wystarcza. Nie wiem jak poradzić sobie z linkami typu http://domena.com i http://www.domena.com jeden z nich powinien zostać usunięty. A także nie wiem jak zrobić, aby skrypt porównywał linki z jednego pliku txt z linkami z drugiego np. badlinks.txt i z 1 usuwał te, które są w 2. Nie wiem czy jasno to opisałem, ale jestem początkujący, więc proszę o wyrozumiałość
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Ludvik
post 12.07.2006, 19:49:30
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Problem w tym, że to nie są dwie takie same domeny. Jeżeli chcesz jednak się tego pozbyć, to usuwaj www. przed dodaniem do bazy.

Usuwanie jest dość proste, jedna operacja na dwóch zbiorach. Odczytujesz obie listy i obliczasz ich różnicę.
A - lista domen
B - lista złych domen

A \ B = lista "dobrych" domen.

array_diff" title="Zobacz w manualu php" target="_manual


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 12.07.2006, 20:35:09
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Dzięki za array_diff o to chodziło.A z tym www wolałbym nie usuwać, dlatego że jeżeli link wystąpi w obu formach to jest prawie pewne, że kryje się pod nimi ten sam serwis. Jednak nieraz po usunięciu z linka WWW przestaje działać.

Niestety spłodziłem coś takiego i nie działa.
  1. <?php
  2. $plik = file('./pelnalistaurli.txt');
  3. $plik2 = file('./badurl.txt');
  4. $wynik = array_diff ($plik, $plik2);
  5. $numerlini = count($plik);
  6. $numerlini2 = count($plik2);
  7. $numerlini3 = count($wynik);
  8. echo $numerlini.'<br>';
  9. echo $numerlini2.'<br>';
  10. echo $numerlini3.'<br>';
  11. var_dump ($wynik);
  12. ?>

W pliku pelnalistaurli jest
janek
ania
marek
zenek

a w pliku badurl
marek
ania

a wynik = pelna listaurli nic nie kasuje.
Go to the top of the page
+Quote Post
Ludvik
post 12.07.2006, 21:27:03
Post #4





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Pokaż zrzuty zmiennych $plik i $plik2, wtedy może coś pomogę. Spróbuj wyniki przepuścić przez funkcję trim" title="Zobacz w manualu php" target="_manual albo podstawić same wartości (array_values" title="Zobacz w manualu php" target="_manual).


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 12.07.2006, 21:40:27
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Kod teraz jaest taki
  1. <?
  2. $plik = file('./pelnalistaurli.txt');
  3. $plik2 = file('./badurl.txt');
  4. $wynik = array_diff ($plik, $plik2);
  5. $numerlini = count($plik);
  6. $numerlini2 = count($plik2);
  7. $numerlini3 = count($wynik);
  8. echo $numerlini.'<br>';
  9. var_dump ($plik);
  10. echo '<br>';
  11. echo $numerlini2.'<br>';
  12. var_dump ($plik2);
  13. echo '<br>';
  14. echo $numerlini3.'<br>';
  15. var_dump ($wynik);
  16. $fp = fopen("urle_sort.txt", "w");
  17. fputs($fp, $wynik);
  18. fclose($fp);
  19. ?>

a wynik taki
Kod
4
array(4) { [0]=> string(6) "janek " [1]=> string(5) "ania " [2]=> string(6) "marek " [3]=> string(5) "zenek" }
2
array(2) { [0]=> string(7) "marek " [1]=> string(6) "ania " }
4
array(4) { [0]=> string(6) "janek " [1]=> string(5) "ania " [2]=> string(6) "marek " [3]=> string(5) "zenek" }
Go to the top of the page
+Quote Post
Ludvik
post 12.07.2006, 21:52:19
Post #6





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Przypatrz się długościom stringów... Są różne, więc elementy różnią się. Spróbuj:
  1. <?php
  2. $plik = array_filter($plik, 'trim');
  3. ?>

I to samo dla drugiej tablicy. Jak nie zadziała to też daj zrzuty...


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 12.07.2006, 22:15:08
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Niestety nadal kiszka nie mam pojęcia skąd się biorą różnicę w stringach

Kod
5
array(5) { [0]=> string(6) "tadek " [1]=> string(5) "ania " [2]=> string(6) "marek " [3]=> string(6) "janek " [4]=> string(6) "wiktor" }
4
array(4) { [0]=> string(6) "ania " [1]=> string(7) "janek " [2]=> string(9) "zdzisiu " [3]=> string(5) "tadek" }
5
array(5) { [0]=> string(6) "tadek " [1]=> string(5) "ania " [2]=> string(6) "marek " [3]=> string(6) "janek " [4]=> string(6) "wiktor" }


Wszystkie imiona wpisywałem ręcznie dając enter na końcu lini.
Go to the top of the page
+Quote Post
Ludvik
post 12.07.2006, 22:20:08
Post #8





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Z tego co napisałeś, to nie widzę, żebyś zrobił, to co mówiłem.
  1. <?
  2. $plik = file('./pelnalistaurli.txt');
  3. $plik = array_filter($plik, 'trim');
  4. $plik2 = file('./badurl.txt');
  5. $plik2 = array_filter($plik2, 'trim');
  6. $wynik = array_diff ($plik, $plik2);
  7. $numerlini = count($plik);
  8. $numerlini2 = count($plik2);
  9. $numerlini3 = count($wynik);
  10. echo $numerlini.'<br>';
  11. var_dump ($plik);
  12. echo '<br>';
  13. echo $numerlini2.'<br>';
  14. var_dump ($plik2);
  15. echo '<br>';
  16. echo $numerlini3.'<br>';
  17. var_dump ($wynik);
  18. $fp = fopen("urle_sort.txt", "w");
  19. fputs($fp, $wynik);
  20. fclose($fp);
  21. ?>


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 12.07.2006, 22:31:14
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Ja mam tak
  1. <?
  2. $plik = file('./pelnalistaurli.txt');
  3. $plik2 = file('./badurl.txt');
  4. $plik = array_filter($plik, 'trim');
  5. $plik2 = array_filter($plik2, 'trim');
  6. $wynik = array_diff ($plik, $plik2);
  7. $numerlini = count($plik);
  8. $numerlini2 = count($plik2);
  9. $numerlini3 = count($wynik);
  10. echo $numerlini.'<br>';
  11. var_dump ($plik);
  12. echo '<br>';
  13. echo $numerlini2.'<br>';
  14. var_dump ($plik2);
  15. echo '<br>';
  16. echo $numerlini3.'<br>';
  17. var_dump ($wynik);
  18. $fp = fopen("urle_sort.txt", "w");
  19. fputs($fp, $wynik);
  20. fclose($fp);
  21. ?>

Ale sprawdzę i twój skrypt



Niestety jak się można domyśleć efekt jest dokładnie ten sam tak jak by trim nic nie dawał i skąd te różnice nie rozumiem tego.

Ten post edytował Qbexus 12.07.2006, 22:31:05
Go to the top of the page
+Quote Post
Ludvik
post 12.07.2006, 22:38:58
Post #10





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Skasowałem... Pomyliłem funkcję blink.gif Zamiast array_filter użyj array_map.
  1. <?php
  2. $plik = array_map('trim', $plik);
  3. ?>


Ten post edytował Ludvik 12.07.2006, 22:41:09


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 12.07.2006, 23:20:32
Post #11





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Wielkie dzięki jest super. A swoją drogą ciekawe skąd się biorą te dziwne nie istniejące znaki.


Niestety mam następnego zonka chyba teraz za dobrze wyczyścilo wszelkie znaki bo jak chce to zapisać to zapisuje mi wszystko w jednej lini zamiast każdy link osobno.
  1. <?php
  2. for( $xbleble = 0; $xbleble <= $numerlini; $xbleble++ )
  3. {
  4.  
  5. sort ($wynik);
  6. reset ($wynik);
  7. $zapisz.= $wynik[$xbleble];
  8. }
  9. $fp = fopen("urle_sort.txt", "w");
  10. fputs($fp, $zapisz);
  11. fclose($fp);
  12. ?>

W innym skrypcie z array_unique to działa bez problemu. blink.gif

Ten post edytował Qbexus 12.07.2006, 22:53:25
Go to the top of the page
+Quote Post
Ludvik
post 12.07.2006, 23:58:14
Post #12





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Posortuj tablicę raz przed pętlą, a nie przy każdym przebiegu. Ogólnie to najlepiej zrobić to tak:
  1. <?php
  2. $zapisz = implode("n", $wynik);
  3. ?>

Gdzie wynik jest tablicą, którą chcesz zrzucić do pliku. Pamiętaj, że przy otwieraniu funkcją file" title="Zobacz w manualu php" target="_manual wyrzucane są wszystkie znaki nowej linii i przed zapisem musisz je przywrócić. Problemy z pustymi znakami to raczej wina edytora, którego używasz. Windows, Linux i Mac OS mają różne metody oznaczania końca wiersza i to są najprawdopodobniej te zbędne znaki.


--------------------
Go to the top of the page
+Quote Post
Qbexus
post 13.07.2006, 17:45:01
Post #13





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 12.07.2006

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


Patrz kurcze jakie to proste a ja zawsze ćwiczyłem pętle i tp. dzięki.
Znacie może jakąś polską stronę gdzie łopatologicznie są takie fajne kruczki opisane?
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: 19.07.2025 - 06:36