Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak rozpoznać powtarzające się liczby?
Forum PHP.pl > Forum > PHP
Saki
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.
com
wyrażeniem regularnym?
pitu
  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.
japan13
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
mar1aczi
@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?
Saki
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
Pyton_000
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ć?
stud3nt
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. }
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.