Một mảng hoặc đối tượng PHP hoặc cấu trúc dữ liệu phức tạp khác không thể được vận chuyển hoặc lưu trữ hoặc sử dụng bên ngoài một tập lệnh PHP đang chạy . Nếu bạn muốn duy trì một cấu trúc dữ liệu phức tạp như vậy ngoài một lần chạy tập lệnh, bạn cần phải tuần tự hóa nó. Điều đó chỉ có nghĩa là đặt cấu trúc vào một "mẫu số chung thấp hơn" có thể được xử lý bởi những thứ khác ngoài PHP, như cơ sở dữ liệu, tệp văn bản, ổ cắm. Hàm PHP tiêu chuẩn serialize
chỉ là một định dạng để thể hiện một thứ như vậy, nó tuần tự hóa cấu trúc dữ liệu thành một biểu diễn chuỗi duy nhất cho PHP và có thể được đảo ngược thành một đối tượng PHP bằng cách sử dụng unserialize
. Tuy nhiên, có nhiều định dạng khác, như JSON hoặc XML.
Lấy ví dụ về vấn đề phổ biến này:
Làm cách nào để chuyển một mảng PHP sang Javascript?
PHP và Javascript chỉ có thể giao tiếp qua chuỗi. Bạn có thể chuyển chuỗi "foo"
rất dễ dàng sang Javascript. Bạn có thể chuyển số 1
rất dễ dàng sang Javascript. Bạn có thể chuyển các giá trị boolean true
và false
dễ dàng sang Javascript. Nhưng làm thế nào để bạn chuyển mảng này sang Javascript?
Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 )
Câu trả lời là tuần tự hóa . Trong trường hợp của PHP / Javascript, JSON thực sự là định dạng tuần tự hóa tốt hơn:
{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }
Javascript có thể dễ dàng đảo ngược điều này thành một mảng Javascript thực tế.
Mặc dù vậy, đây cũng là một biểu diễn hợp lệ của cùng một cấu trúc dữ liệu:
a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}
Nhưng hầu như chỉ có PHP sử dụng nó, có rất ít hỗ trợ cho định dạng này ở bất kỳ nơi nào khác.
Điều này là rất phổ biến và cũng được hỗ trợ:
<array>
<element key='1'>elem 1</element>
<element key='2'>elem 2</element>
<element key='3'>elem 3</element>
</array>
Có nhiều trường hợp bạn cần chuyển các cấu trúc dữ liệu phức tạp xung quanh dưới dạng chuỗi. Tuần tự hóa, biểu diễn cấu trúc dữ liệu tùy ý dưới dạng chuỗi, giải quyết cách thực hiện điều này.