Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Podmiana znaków w tekście
-blondii-
post 7.02.2012, 20:04:57
Post #1





Goście







Witam,

Mam pewien problem z podmianą znaków w tekście. Sytuacja wygląda następująco: mam pewien łańcuch tekstowy w postaci np. 2341X4E1R. W tablicy każdej literze (w tym przypadku jest to X,E i R) przyporządkowane są pewne cyfry np. X -> 1; E-> 2,4,5; R-> 0,7. Z tego wynika, że dla tego łańcucha tekstowego może powstać 6 innych (1*3*2).

Przykład.

Mamy dwie tablice. W jednej zapisane są kody a w drugiej odpowiadające im cyfry (elementowi j z tablicy $kody odpowiada element j z tablicy $cyfry):
  1. $kody = array("A","A","A","B","C","C","DX","DX","DX","DX","TO","TO","PW");
  2. $cyfry = array("1","3","5","7","4","6","2","3","4","5","0","9","8");


Chodzi o to, że na wejście dostajemy ciąg znaków taki jak (zawiera 3 kody):
  1. 270A174DX2PW


Na wyjściu powinniśmy dostać 12 różnych ciągów (3*4*1):
  1. 2701174228
  2. 2703174228
  3. 2705174228
  4. 2701174328
  5. 2703174328
  6. 2705174328
  7. 2701174428
  8. 2703174428
  9. 2705174428
  10. 2701174528
  11. 2703174528
  12. 2705174528




Problem jest tego typu, że ciąg na wejściu może być:
a) różnej długości
b) zawierać różną ilość kodów np. w jednym może być 1, w drugim 5, a w trzecim 3 kody
c) każdemu kodowi odpowiada różna ilość cyfr (w przykładzie kodowi A odpowiadają 3 cyfry a kodowi DX 4)

Jak zrobić taką zamianę w najlepszy sposób?

Z góry dzięki
Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Morfi777
post 7.02.2012, 20:58:55
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 1
Dołączył: 5.09.2007

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


Nie wiem czy najlepszy, ale działający ohmy.gif


  1. <?
  2.  
  3. $Input = "270A174DX2PW";
  4.  
  5. /**/
  6.  
  7. $start = microtime();
  8.  
  9. $kody = array("A","A","A","B","C","C","DX","DX","DX","DX","TO","TO","PW");
  10. $cyfry = array("1","3","5","7","4","6","2","3","4","5","0","9","8");
  11. $Merge = array( );
  12. $NoD = array_flip($kody);
  13. $Count = count($kody);
  14.  
  15.  
  16. for( $x = 0; $x < $Count; $x++ )
  17. {
  18. if( array_key_exists($kody[$x], $Merge) )
  19. array_push($Merge[$kody[$x]], $cyfry[$x]);
  20. else
  21. $Merge[$kody[$x]] = array($cyfry[$x]);
  22. }
  23.  
  24.  
  25. function qwe($String)
  26. {
  27. $TEMP = '';
  28.  
  29. foreach ( $GLOBALS["NoD"] as $key => $random )
  30. {
  31. if(strpos($String, $key))
  32. {
  33. foreach($GLOBALS["Merge"][$key] as $val)
  34. $TEMP .= str_replace($key, $val, $String) . ':';
  35.  
  36. $String = $TEMP;
  37. $TEMP = '';
  38.  
  39. }
  40. }
  41.  
  42. return $String;
  43.  
  44. }
  45.  
  46. /**/
  47.  
  48. $Boom = explode(':', qwe($Input));
  49.  
  50. $Count = count($Boom);
  51.  
  52. for( $x = 0; $x < $Count; $x++ )
  53. print $Boom[$x] . '<br />';
  54.  
  55. print 'Exec: ' . ( microtime() - $start ) . 's';
  56.  
  57. ?>


Ten post edytował Morfi777 7.02.2012, 20:59:53
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: 31.07.2025 - 10:50