Mój problem jest bardzo podstawowy.
Nie znalazłem żadnego przykładu, który spełniałby moje potrzeby, co dokładnie serialize()
i co unserialize()
oznacza w php? Podają tylko przykład - serializują tablicę i pokazują dane wyjściowe w niewyjaśnionym formacie. Naprawdę trudno jest zrozumieć podstawową koncepcję dotyczącą ich żargonu.
EDYTOWAĆ:
<?php
$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);
?>
wynik:
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Nie rozumiem drugiego wyjścia. Poza tym, czy ktoś może podać przykład sytuacji, w której muszę serializować tablicę php przed jej użyciem?
Odpowiedzi:
Tablica lub obiekt PHP lub inna złożona struktura danych nie może być transportowana, przechowywana ani używana w inny sposób poza uruchomionym skryptem PHP . Jeśli chcesz zachować tak złożoną strukturę danych poza jednym uruchomieniem skryptu, musisz ją serializować . Oznacza to po prostu umieszczenie struktury w „niższym wspólnym mianowniku”, który może być obsługiwany przez elementy inne niż PHP, takie jak bazy danych, pliki tekstowe, gniazda. Standardowa funkcja PHP
serialize
jest po prostu formatem służącym do wyrażania takich rzeczy, serializuje strukturę danych do postaci łańcucha, która jest unikalna dla PHP i może zostać odwrócona do obiektu PHP za pomocąunserialize
. Istnieje jednak wiele innych formatów, takich jak JSON lub XML.Weźmy na przykład ten powszechny problem:
Jak przekazać tablicę PHP do JavaScript?
PHP i Javascript mogą komunikować się tylko za pomocą łańcuchów. Możesz
"foo"
bardzo łatwo przekazać ciąg znaków do Javascript. Możesz1
bardzo łatwo przekazać ten numer do Javascript. Można przekazać wartości logicznetrue
ifalse
łatwe do Javascript. Ale jak przekazać tę tablicę do Javascript?Odpowiedzią jest serializacja . W przypadku PHP / Javascript JSON jest faktycznie lepszym formatem serializacji:
Javascript może łatwo odwrócić to do rzeczywistej tablicy Javascript.
Jest to jednak równie ważna reprezentacja tej samej struktury danych:
Ale prawie tylko PHP go używa, nigdzie indziej nie ma wsparcia dla tego formatu.
Jest to jednak bardzo powszechne i dobrze obsługiwane:
Istnieje wiele sytuacji, w których trzeba przekazywać złożone struktury danych w postaci łańcuchów. Serializacja, reprezentująca dowolne struktury danych jako ciągi, rozwiązuje, jak to zrobić.
źródło
i:1
= liczba całkowita 1,s:6:"elem 1"
= ciąg z 6 znakami „elem 1” ... A o jaki przykład prosisz, myślałem, że podałem jeden?echo json_encode($array);
To , jak dokładnie to zdasz , zależy od okoliczności. Nie przejmuj się tym.Użycie serialize () unserialize () PHP
http://freeonlinetools24.com/serialize
Co daje wynik podobny do tego
ponownie, jeśli chcesz odzyskać oryginalną tablicę, użyj funkcji PHP unserialize ()
Mam nadzieję, że to pomoże
źródło
Jeśli chcesz, aby wartość php była przechowywana, musisz zmienić ją na wartość ciągu, tak właśnie robi serialize () . I unserialize () robi coś odwrotnego.
źródło
serialize()
iunserialize()
są stworzone.Uruchom ten program, aby wyświetlić wynik
tutaj
a = rozmiar tablicy
i = liczba numerów tablicy
s = rozmiar wartości tablicy
możesz użyć serializacji do przechowywania tablicy danych w bazie danych
i możesz pobierać i UN-serializować dane do użycia.
źródło
Większość nośników danych może przechowywać typy ciągów . Nie mogą bezpośrednio przechowywać struktury danych PHP, takiej jak tablica lub obiekt, i nie powinny, ponieważ spowodowałoby to połączenie nośnika danych z PHP.
Zamiast tego
serialize()
umożliwia przechowywanie jednej z tych struktur jako ciągu. Można go zdeserializować z reprezentacji ciągu za pomocąunserialize()
.Jeśli znasz
json_encode()
ijson_decode()
(i ogólnie JSON), koncepcja jest podobna.źródło
serialize()
poprzedza JSON.Proszę! Proszę! Proszę! NIE serializuj danych i nie umieszczaj ich w swojej bazie danych. Serialize może być używany w ten sposób, ale to oznacza brak sensu relacyjnej bazy danych i typów danych właściwych dla twojego silnika bazy danych. W ten sposób dane w Twojej bazie danych są nieprzenośne, trudne do odczytania i może skomplikować zapytania. Jeśli chcesz, aby Twoja aplikacja była przenośna do innych języków, na przykład, powiedzmy, że odkryjesz, że chcesz używać Javy w jakiejś części aplikacji, w której warto używać Javy, serializacja stanie się bólem pośladków. Zawsze powinieneś mieć możliwość przeszukiwania i modyfikowania danych w bazie danych bez korzystania z narzędzia pośredniczącego strony trzeciej do manipulowania danymi, które mają być wstawione.
naprawdę utrudnia utrzymanie kodu, kodu z problemami z przenośnością i danych, które są trudniejsze do migracji do innych systemów RDMS, nowego schematu itp. Ma również tę dodatkową wadę, że utrudnia przeszukiwanie bazy danych na podstawie jednego z pola, które zserializowałeś.
Nie znaczy to, że serialize () jest bezużyteczny. To nie jest ... Dobrym miejscem do użycia może być na przykład plik pamięci podręcznej zawierający wynik operacji intensywnie wykorzystującej dane. Jest mnóstwo innych ... Po prostu nie nadużywaj serializacji, ponieważ następny facet, który przyjdzie, będzie miał koszmar związany z konserwacją lub migracją.
Dobry przykład serialize () i unserialize () może wyglądać tak:
Usuń numer seryjny na stronie
źródło
Z http://php.net/manual/en/function.serialize.php :
Zasadniczo pobiera tablicę lub obiekt php i konwertuje ją na łańcuch (który można następnie przesłać lub przechowywać według własnego uznania).
Unserialize służy do konwersji ciągu z powrotem do obiektu.
źródło
Zasadniczo, kiedy serializujesz tablice lub obiekty, po prostu zmieniasz je na prawidłowy format ciągu, abyś mógł łatwo przechowywać je poza skryptem php.
Uwaga dla obiektu powinieneś używać magicznych metod __sleep i __wakeup. __sleep jest wywoływana przez serialize (). Metoda uśpienia zwróci tablicę wartości z obiektu, który chcesz zachować.
Funkcja __wakeup jest wywoływana przez unserialize (). Metoda wakeup powinna pobierać nieserializowane wartości i inicjować je w nich w obiekcie.
Do przekazywania danych między php i js należy użyć json_encode, aby zmienić tablicę php na prawidłowy format json. Lub odwrotnie - użyj JSON.parese (), aby przekonwertować dane wyjściowe (ciąg znaków) na prawidłowy obiekt json. Chciałbyś to zrobić, aby skorzystać z lokalnej pamięci. (dostęp do danych offline)
źródło
Tak, mogę. Załóżmy, że musimy śledzić twój system oznacza, że Twój system ma więcej niż jednego administratora i subadmina, wszyscy z nich mogą wstawiać, aktualizować lub edytować dowolne informacje. Później musisz wiedzieć, kto wprowadza tę zmianę. Aby rozwiązać ten problem, potrzebujesz serializacji.
Mam nadzieję, że to Ci pomoże.
źródło
źródło