Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak rozpoznać powtarzające się liczby?
Saki
post 26.09.2013, 19:31:01
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Witam, mam pytanie, jak rozpoznać dzięki php powtarzające się liczby?

Przykład: 5679854356798543567985435679854356798543
Teraz aby php zamieniło na: 56798543,56798543,56798543,56798543,56798543

Próbowałem dużo rzeczy, ale nie umiałem sobie poradzić, proszę o pomoc.


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
com
post 26.09.2013, 19:34:08
Post #2





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

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


wyrażeniem regularnym?
Go to the top of the page
+Quote Post
pitu
post 26.09.2013, 19:42:03
Post #3





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

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


  1. $number = str_split(56799944);
  2. $result = array_unique($number);
  3. print_r($result);
  4.  


Ups nie przeczytałem dokładnie co miało być na wyjściu, powyższy kod wyeliminuje duplikaty tylko.

Ten post edytował pitu 26.09.2013, 19:44:08


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
japan13
post 26.09.2013, 20:23:39
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 2
Dołączył: 31.10.2008

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


Witaj,

Nie wiem do czego chcesz tego używać ale ja spróbowałbym przelecieć ten ciąg str_replace i "543" zamienić na "543," smile.gif

Przykład:

  1. <?php
  2.  
  3. $ciag = "5679854356798543567985435679854356798543";
  4.  
  5. echo str_replace("543","543,",$ciag);
  6.  
  7. ?>


Albo tak jak kolega wyżej napisał wyrażenia regularne.


---
Pozdrawiam S.N
Go to the top of the page
+Quote Post
mar1aczi
post 26.09.2013, 20:53:17
Post #5





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


@up
Tak możesz zrobić, gdy znasz ciąg znaków, po którym następuje powtórzenie.

@autor
Mało precyzyjne dane.
1. Czy ciąg wejściowy jest zawsze tej samej długości?
2. Czy ciąg wyjściowy ma zawsze tą samą ilość elementów o stałej długości?

Ten post edytował mar1aczi 26.09.2013, 20:56:57


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Saki
post 26.09.2013, 20:55:12
Post #6





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Cytat(japan13 @ 26.09.2013, 21:23:39 ) *
Witaj,

Nie wiem do czego chcesz tego używać ale ja spróbowałbym przelecieć ten ciąg str_replace i "543" zamienić na "543," smile.gif

Przykład:

  1. <?php
  2.  
  3. $ciag = "5679854356798543567985435679854356798543";
  4.  
  5. echo str_replace("543","543,",$ciag);
  6.  
  7. ?>


Albo tak jak kolega wyżej napisał wyrażenia regularne.


---
Pozdrawiam S.N


A skąd mam wiedzieć, co mam zamienić w $liczby? str_replace($liczby,"$liczby.','",$ciag);
Chce aby php samo znalazło powtarzające się liczby w dość długiej liczbie i pokazało mi powtarzające się liczby.
45678908767576565456789087675765654567890876 by wyswietliło 4567890876, 7576565


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
Pyton_000
post 26.09.2013, 21:25:32
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Bierzesz ramkę powiedzmy 3 cyfry i przeszukujesz cały ciąg wypisując do tablicy kombinacje wyszukane i licznik ile razy było znalezione.
Potem zwiększasz ramkę o 1 cyfrę i jedziemy od początku

Przede wszystkim jakiej długości minimalnie ma być ciąg który się może powtórzyć?

Ten post edytował Pyton_000 26.09.2013, 21:26:42
Go to the top of the page
+Quote Post
stud3nt
post 26.09.2013, 21:45:31
Post #8





Grupa: Zarejestrowani
Postów: 46
Pomógł: 7
Dołączył: 6.01.2012

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


Cytat(Pyton_000 @ 26.09.2013, 22:25:32 ) *
Bierzesz ramkę powiedzmy 3 cyfry i przeszukujesz cały ciąg wypisując do tablicy kombinacje wyszukane i licznik ile razy było znalezione.
Potem zwiększasz ramkę o 1 cyfrę i jedziemy od początku

Przede wszystkim jakiej długości minimalnie ma być ciąg który się może powtórzyć?


To też chciałem zaproponować, ale przelatywanie cyfr od 0 do 999 jest trochę mało wydajne, a co dopiero przy większej ilości.
Na pewno ma to sens, jeśli szukamy max 2-cyfrowej liczby.

W przypadku dłuższych ciągów nie wiem, czy nie wydajniej byłoby zrobić 'suwak' obejmujący ileś tam liczb.
1) Najpierw "odcinamy" cyfry (od pozycji 0 do 4) i robimy z nich wzorzec;
2) Przelatujemy wzorcem ciąg i wypisujemy powtórzenia;
3) Robimy nowy wzorzec przesunięty o 1 (odcinamy od pozycji 1 do 5 w ciągu) i znowu porównujemy;
4) I tak do skutku. Przerywamy, gdy rozpiętość wzorca przekroczy długość badanego ciągu.

Coś w ten deseń:

  1. $testSequence = '5679854356798543567985435679854356798543'; //testowany ciąg liczb
  2. $patternLength = 4; //startowa wielkość badanego wycinka;
  3.  
  4. for ($patternLength; $patternLength <= ceil(strlen($testSequence) / 2); $patternLength++)
  5. {
  6. for ($i=0; $i<=(strlen($testSequence) - $patternLength); $i++)
  7. {
  8. $pattern = '/'.substr($i, ($i+$patternLength)).'/';
  9. preg_match_all($pattern, $testSequence, $matches);
  10.  
  11. if (count($matches) > 1)
  12. {
  13. echo implode(",", $matches);
  14. }
  15. }
  16. }


Ten post edytował stud3nt 26.09.2013, 21:55:17
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: 18.04.2024 - 19:08