Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> serialize i unserialize
-Gość_Janek-
post 25.03.2005, 17:15:19
Post #1





Goście







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 to the top of the page
+Quote Post
legorek
post 25.03.2005, 17:30:27
Post #2





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


implode" title="Zobacz w manualu PHP" target="_manualexplode" title="Zobacz w manualu PHP" target="_manual


--------------------
Go to the top of the page
+Quote Post
-Gość_Janek-
post 25.03.2005, 17:48:39
Post #3





Goście







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?
Go to the top of the page
+Quote Post
crash
post 25.03.2005, 18:16:46
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


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...

Ten post edytował crashu 25.03.2005, 18:26:20


--------------------
Go to the top of the page
+Quote Post
-Gość_Janek-
post 25.03.2005, 18:17:02
Post #5





Goście







Zmieniłem tablice asocjacyjną na normalną i już działa (oczywiscie przy zastosowaniu implode i explode).

THX smile.gif smile.gif
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: 17.05.2025 - 09:11