Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: serialize i unserialize
Forum PHP.pl > Forum > Przedszkole
Gość_Janek
WITAM!!

Mam taki skrypt

  1. <?php
  2. $tabela = array ('Bologna' => 'Reggina', 'Fiorentina' => 'Chievo',
  3.  'Inter' => 'Brescia', 'Juventus' => 'Milan',
  4.  'Lecce' => 'Sampdoria', 'Messina' => 'Atalanta',
  5.  'Palermo' => 'Cagliari', 'Roma' => 'Parma',
  6.  'Siena' => 'Livorno', 'Udinese' => 'Lazio');
  7. $data = serialize($tabela);
  8. $data = str_replace('Bologna', 'Chelsea', $data);
  9. $data = str_replace('Reggina', 'Deportivo', $data);
  10. $data = str_replace('Fiorentina', 'AS Monaco', $data);
  11. $data = str_replace('Chievo', 'Juventus', $data);
  12. $data = str_replace('Inter', 'Manchester Utd.', $data);
  13. $data = str_replace('Brescia', 'Arsenal', $data);
  14. $data = str_replace('Juventus', 'Barcelona', $data);
  15. $data = str_replace('Milan', 'Valencia', $data);
  16. $data = str_replace('Lecce', 'Inter', $data);
  17. $data = str_replace('Sampdoria', 'PSV', $data);
  18. $data = str_replace('Messina', 'Villarreal', $data);
  19. $data = str_replace('Atalanta', 'AC Milan', $data);
  20. $data = str_replace('Palermo', 'Newcastle Utd.', $data);
  21. $data = str_replace('Cagliari', 'Real Madryt', $data);
  22. $data = str_replace('Roma', 'FC Porto', $data);
  23. $data = str_replace('Parma', 'AS Roma', $data);
  24. $data = str_replace('Siena', 'Bayern', $data);
  25. $data = str_replace('Livorno', 'Liverpool', $data);
  26. $data = str_replace('Udinese', 'Ajax', $data);
  27. $data = str_replace('Lazio', 'Borussia', $data);
  28. $data = unserialize($data);
  29. foreach ($tabela as $druzyna1 => $druzyna2)
  30. {
  31. echo &#092;"<font size=1 color=black face=verdana>\";
  32. echo &#092;"<br><b>$druzyna1 - $druzyna2</b>\";
  33. echo &#092;"</font>\";
  34. }
  35. ?>



Chce zrobić tak, żeby zamienic tą pierwsza tablice na ciąg, w tym ciągu pozamieniać wszystko tak jak to widać w skrypcie, a nastepnie ponownie z tego utworzyc tablice i wyswietlic. Niestety kiedy wyswietlam, wartosci tablicy pozostają takie jakie były. Jak mozna by to inaczej zrobic? Z góry dzieki za pomoc! smile.gif
Gość_Janek
Tak, tylko, że po uzyciu implode ciąg bedzie wygladał tak:
$ciag = "Reggina Chievo Brescia ..."
Natomiast jak zrobić, tak żeby do ciagu zapisały się także kluczy tej tablicy?
crash
Twój sposób byłby dobry gdybyś brał pod uwagę jeszcze to, że w zserializowanej tablicy są zapisane typy danych i ich długości. Np. jeśli zmieniasz Wyraz 'dom' na 'krowa' to wpis powinien wyglądać tak:
  1. <?php
  2. $data = str_replace('s:3:\"dom\";', 's:5:\"krowa\";', $data)
  3. ?>

Do Twoich potrzeb możesz użyć w taki sam sposób jak str_replace() np. takiej funkcji:
  1. <?php
  2. function serialed_replace($a, $b, $c)
  3. {
  4.     if(is_int($a))
  5.     {
  6.         $rep_a = 'i:'.$a.';';
  7.         
  8.         if(is_int($b))
  9.         {
  10.             $rep_b = 'i:'.$b.';';
  11.         }
  12.         elseif(is_string($b))
  13.         {
  14.             $rep_b = 's:'.strlen($b).':\"'.$b.'\";';
  15.         }
  16.     }
  17.     elseif(is_string($a))
  18.     {
  19.         $rep_a = 's:'.strlen($a).':\"'.$a.'\";';
  20.         
  21.         if(is_int($b))
  22.         {
  23.             $rep_b = 'i:'.$b.';';
  24.         }
  25.         elseif(is_string($b))
  26.         {
  27.             $rep_b = 's:'.strlen($b).':\"'.$b.'\";';
  28.         }
  29.     }
  30.     else
  31.     {
  32.         // innych danych (np. tablic) nie ruszam;-P
  33.     }
  34.     
  35.     return str_replace($rep_a, $rep_b, $c);
  36. }
  37. ?>


---
Edit: I po co się tu męczyć skoro i tak taki Gość_Janek pójdzie po najmniejszej linii oporu...
Gość_Janek
Zmieniłem tablice asocjacyjną na normalną i już działa (oczywiscie przy zastosowaniu implode i explode).

THX smile.gif smile.gif
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.