Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> tablica wielowymiarowa
attimo
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 6
Dołączył: 23.01.2010

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


wartosc nie chce sie przypisac do tablicy. przypisuje sie dla pierwszych dwoch wykonan ale potem juz nie chociaz warunek sie spelnia istnieje wartosc. chodzi o to ze kazde kolejne wpisanie litery powoduje jesli zgadza sie z wzorcem ucinanie o jeden i zpaisanie do tablicy.
  1. } else if(strlen($znak) > 1 && $_SESSION['usun'] == false) {
  2. for($i=0;$i<$_SESSION['ile'];$i++) {
  3. if($_SESSION['tab'][strlen($znak)-2][$i][0] === $znak[strlen($znak)-1]) {
  4. $_SESSION['tab'][strlen($znak)-1][] = substr($_SESSION['tab'][strlen($znak)-2][$i],1);
  5. if($_SESSION['tab'][strlen($znak)-1][$i][0] == '') {
  6. array_pop($_SESSION['tab']);
  7. }
  8. }
  9. }
  10. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
everth
post
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Wczoraj miałem zagwozdkę gdy opisywałem ci metodę na słownik. Dziś udało mi się chyba doprowadzić skrypt do postaci działającej. Nie jestem programistą więc prezentowane rozwiązanie może być naiwne, proszę o wyrozumiałość bardziej 'rozumnych'. Skrypt składa się z dwóch części - jedna po stronie PHP przygotowuje słownik z przykładowej listy słów, koduje i wysyła JSONem. Druga jako obiekt JS pozwala ten słownik rozkodować, modyfikować, przeszukiwać. Testowane tylko na Chrome, więc na innych może nie działać.
Skrypt JS:
[JAVASCRIPT] pobierz, plaintext
  1. // Obiekt Słownik
  2. // .addWords(words) - dodaje słowa do słownika z tablicy;
  3. // .addWord(word) - dodaje pojedyncze słowo
  4. //
  5. // .searchWord(pattern) - zwraca tablicę słów pasujących do dopasowania
  6.  
  7. /**
  8.  * Tworzy obiekt Słownik
  9.  *
  10.  * @constructor
  11.  * @this {Slownik}
  12.  * @param {slownik} przyjmuje sformatowany słownik (np. poprzez ajax)
  13.  */
  14. function Slownik(slownik) {
  15. /** @private */ var dict = (typeof(slownik)!='undefined' && slownik) ? slownik:new Array();
  16.  
  17.  
  18. /**
  19.  * Podmieniam plik słownika (np. na pobrany za pomocą ajaxa
  20.  *
  21.  * @this {Slownik}
  22.  * @param {new_dict} Nowy słownik
  23.  * @return {Slownik} Zwraca referencje do obiektu
  24.  */
  25. this.addDict = function(new_dict) {
  26. dict = new_dict;
  27. return this;
  28. }
  29.  
  30. /**
  31.  * Dodaje słowa do słownika z tablicy
  32.  *
  33.  * @this {Slownik}
  34.  * @param {words} Jednowymiarowa tablica zawierająca słowa
  35.  * @return {Slownik} Zwraca referencje do obiektu
  36.  */
  37.  
  38. this.addWords = function(words) {
  39. ar_length = words.length
  40. for(i in words) {
  41. this.addWord(words[i]);
  42. }
  43. return this;
  44. }
  45.  
  46. /**
  47.  * Dodaje słowo do słownika
  48.  *
  49.  * @this {Slownik}
  50.  * @param {word} Dodawane słowo
  51.  * @return {Slownik} Zwraca referencje do obiektu Slownik
  52.  */
  53. this.addWord = function(word) {
  54. var temp_dict = dict;
  55. w_length = word.length;
  56. for (i=0;i<w_length;i++) {
  57. k = word[i]//.charCodeAt(0).toString()
  58. window.console.debug(typeof(k))
  59. if (!temp_dict[k]) {
  60. temp_dict[k] = (typeof(word[i+1])=='undefined') ? null:new Array();
  61. }
  62. temp_dict = temp_dict[k];
  63. }
  64. return this;
  65. };
  66.  
  67. /**
  68.  * Wyszukuje słowa pasujące do wzorca
  69.  *
  70.  * @this {Slownik}
  71.  * @param {word} Szukany wzorzec
  72.  * @return {result} Zwraca tablicę słów pasujących do wzorca
  73.  */
  74.  
  75. this.searchWord = function(word) {
  76. ref = getIndex(word);
  77. result= new Array();
  78. getMatches(result,ref,word);
  79. return result;
  80. };
  81.  
  82. function getIndex(word) {
  83. temp_ref = dict;
  84. w_length = word.length;
  85. for (k=0;k<w_length;k++) {
  86. i = word[k]//.charCodeAt(0).toString()
  87. if (temp_ref[i]) {
  88. temp_ref = temp_ref[i];
  89. } else {
  90. return false
  91. }
  92. }
  93. return temp_ref;
  94. };
  95.  
  96. function getMatches(result,ref,prev_word) {
  97. for(key in ref) {
  98. new_word = prev_word+key//String.fromCharCode(key);
  99. if (ref[key]==null) temp_ref = result.push(new_word);
  100. getMatches(result,ref[key],new_word)
  101. }
  102. };
  103. }
  104.  
  105. // Przykładowe połączenie z AJAX
  106.  
  107. $(document).ready(function() {
  108. $.get('slownik.php',function(result) {
  109. dictio = new Slownik(result); //tworzę słownik - słowa pobieram za pomocą JSON
  110. res = dictio.searchWord('h'); //zwraca dopasowania do litery h
  111. window.console.debug(res); //wyświetlam w konsoli
  112. },'json')
  113. });
[JAVASCRIPT] pobierz, plaintext

Oraz część w PHP
  1. class Dictionary {
  2.  
  3. private $dict = array();
  4.  
  5. function __construct($words) {
  6. $this->createDictionary($words);
  7. }
  8.  
  9. function createDictionary($words) {
  10. foreach($words as $word) {
  11.  
  12. $this->addWord($word);
  13. }
  14. }
  15.  
  16. function addWord($word) {
  17. $temp_dict =& $this->dict;
  18. $w_length = strlen($word);
  19. for($i=0;$i<$w_length;$i++) {
  20. $char = $word[$i];
  21. if (!isset($temp_dict[$char])) {
  22. $temp_dict[$char] = (isset($word[$i+1])) ? array():NULL;
  23. }
  24. $temp_dict =& $temp_dict[$char];
  25. }
  26. return $this;
  27. }
  28.  
  29. function getJSON() {
  30. return json_encode($this->dict);
  31. }
  32.  
  33. }
  34.  
  35. // ZASTOSOWANIE
  36.  
  37. $words = array('hihi','hyhy','humhum'); //przykładowe słowa
  38.  
  39. $dict = new Dictionary($words); //tworzę słownik
  40. echo $dict->getJSON(); //pobieram dane w formacie JSON
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.10.2025 - 13:55