Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Porównywanie ciągów
ayeo
post 5.10.2007, 22:03:15
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!
Przykład:

$a = "Ala ma kota"
$b = "Ala nie ma kota"

Chciałbym wyciągnąc róznice pomiędzy ciągami, w tym przypadku "nie". Ma ktoś jakieś pomysły?

Myślałem, żeby każdy wyraz dodawać do tablicy i dalej z tym kombinować, ale szukam czegos prostego. Stringi będą długie np. 2 kartki A4 smile.gif

Ten post edytował harold1982 5.10.2007, 22:08:14


--------------------
Go to the top of the page
+Quote Post
pavobe
post 5.10.2007, 22:06:35
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 25.09.2007
Skąd: Poznań

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


Ja bym dał coś takiego:

Kod
if ($a == $b)
     echo 'Takie same';
else
     echo 'Inne';


Nie znam się za bardzo, ale to będzie jakoś tak winksmiley.jpg


--------------------
pavobe.pl - pavobe's weblog
WPMedia.pl - blog o
WordPress
Go to the top of the page
+Quote Post
ayeo
post 5.10.2007, 22:13:06
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Wielkie dzięki! Tylko nie o to chodzi smile.gif Przykładem nich będzie Wikipedia. Jak wejdziesz w historie edycji to pokazuje Ci co zostało zmienione w stosunku do poprzedniego wpisu. Czyli coś dodane, coś usunięte, coś zmienione (czyli usunięte + zmienione). Chodzi mi o to jak to ugryźć jakoś elegancko.


--------------------
Go to the top of the page
+Quote Post
ayeo
post 5.10.2007, 22:25:37
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Ok dzięki biggrin.gif


--------------------
Go to the top of the page
+Quote Post
no_face
post 5.10.2007, 22:30:07
Post #5





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


O ile same roznice byloby latwo zrobic, to by napisac skrypt, ktory wykrywalby roznice takie jak usuniecie, zmiane itd, bedzie trudniej. Nie kazde wystapienie jednego slowa w nowym tekscie mogloby byc brane jako zmiana, tylko z tego powodu, ze w innym miejscu przy porownaniu te slowo zostalo zmienione. Na szybko moza zasugerowac badanie ciagu krok po kroku.
Go to the top of the page
+Quote Post
ayeo
post 5.10.2007, 22:33:38
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


myślałem o tablicach. W sensie rozbić zdania na wyrazy i każdy przypisać do tablicy. Ale co dalej jest tyle If'ów w mojej głowie smile.gif


--------------------
Go to the top of the page
+Quote Post
no_face
post 5.10.2007, 23:01:11
Post #7





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Na dzien dzisiejszy gotowego pomyslu nie mam, podsune tylko rozumowanie.

Kod
ala     ma kota ta te ti
ala nie ma kota ta    ti


napisz skrypt, ktory tak to bedzie widzial smile.gif w tym czasie masz jak na dloni "dodany" i "usuniety" tekst. Zmieniony potraktuj jako dodany.

Jesli przyjdzie mi jakies mniej filozoficzne rozwiazanie, dam znac.

Ten post edytował no_face 5.10.2007, 23:01:48
Go to the top of the page
+Quote Post
ayeo
post 5.10.2007, 23:51:24
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Tak to widze właśnie smile.gif ale co jeśli:
$a = "Kota ala ma"
$b = "Ala ma kota"

proste porównanie tablic da 100% zgodność... ważne jest to, że Ala występuje po ma, a ma itd...

Myślałem, żeby podzielić tego stringa na linijki i sprawdzac całe linije, ale to troche bez sensu. Można dzielić na zdania, ale nie każdy stawia kropke na końcu smile.gif

Ten post edytował harold1982 5.10.2007, 23:55:07


--------------------
Go to the top of the page
+Quote Post
no_face
post 6.10.2007, 09:00:26
Post #9





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


W tym przypadku mozesz potraktowac to jako nowy tekst, ewentualnie edycja czyli cos w stylu:

Kod
kota ala ma
     ala ma kota


Zmiana pozycji rowna sie jakiej edycji w tym czasie slowo "kota" bedzie wystepowalo "nowe".

Chyba, ze chcesz inteligentny system, ktory porownuje logiczna calosc smile.gif
Go to the top of the page
+Quote Post
wrcnitro
post 6.10.2007, 10:01:57
Post #10





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 4.03.2006

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


tongue.gif strasznie spiący jestem moze kilka błedów poełniłem moze wogule nie ma to sensu tongue.gif

  1. <?php
  2. if ($a == $b)
  3.  echo 'Takie same';
  4. else {
  5. $roznica=array();
  6. $x=explode(' ',$a);
  7. $y=explode(' ',$a);
  8. $xl=count($x);
  9. $yl=count($x);
  10. if($xl>=$yl) {
  11. for ($c=0;$c<=$yl;$c++) {
  12. if(!in_array($x[$c],$y)) {
  13. array_push($roznica,$x[$c]);
  14. }
  15. }
  16. } else {
  17. for ($c=0;$c<=$yl;$c++) {
  18. if(!in_array($y[$c],$x)) {
  19. array_push($roznica,$y[$c]);
  20. }
  21. }
  22. }
  23. }
  24. ?>


do tego mozna do ifów dorzucić sprawdzenie indeksów x i y czy sa takie same ;PP a wraz z kolejną różnica odejmowanie indeksów o jeden tongue.gifP i powinno ładnie wszytsko wyjść:P

Pozdrawiam press!!
Go to the top of the page
+Quote Post
ayeo
post 6.10.2007, 12:20:12
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


No tak, ale co jeśli:

$a = "Ala ma dużego kota";
$b = "Mała Ala ma kota";

To, że dany wyraz nie znajduje się na tej samej pozycji nic nie znaczy sad.gif W drugim wyrażeniu dodano "Mała"co przesuwa całą reszte, ale treść pozostaje ta sama...

EDIT: istnieje gotowe rozwiązanie pod nazwą Diff Engine winksmiley.jpg

Ten post edytował harold1982 22.11.2007, 00:19:30


--------------------
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: 8.07.2025 - 06:06