133 votes

Comment utiliser les fonctions serialize() et unserialize() de php ?

Mon problème est très simple.

Je n'ai pas trouvé d'exemple qui réponde à mes besoins quant à ce qu'il faut faire. serialize() y unserialize() en php ? Ils donnent juste un exemple - sérialiser un tableau et montrer une sortie dans un format inexpliqué. Il est vraiment difficile de comprendre le concept de base en passant par leur jargon.

EDIT :

<?php

$a= array( '1' => 'elem 1', '2'=> 'elem 2', '3'=>' elem 3');
print_r($a);
echo ("<br></br>");
$b=serialize($a);
print_r($b);

?>

sortie :

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";}

Je ne comprends pas la deuxième sortie. En outre, quelqu'un peut-il me donner un exemple de situation dans laquelle je dois sérialiser un tableau php avant de l'utiliser ?

179voto

deceze Points 200115

Un tableau ou un objet PHP ou autre structure de données complexe ne peut être transporté, stocké ou utilisé d'une autre manière en dehors d'une exécution du script PHP . Si vous voulez persister une structure de données aussi complexe au-delà d'une seule exécution d'un script, vous devez sérialiser il. Cela signifie simplement mettre la structure dans un "plus petit dénominateur commun" qui peut être géré par d'autres choses que PHP, comme des bases de données, des fichiers texte, des sockets. La fonction PHP standard serialize est juste un format pour exprimer une telle chose, il sérialise une structure de données dans une représentation de chaîne de caractères qui est unique à PHP et qui peut être inversée en un objet PHP en utilisant unserialize . Il existe cependant de nombreux autres formats, comme JSON ou XML.


Prenons par exemple ce problème courant :

Comment puis-je passer une commande PHP tableau à Javascript ?

PHP et Javascript ne peuvent communiquer que par des chaînes de caractères. Vous pouvez passer la chaîne "foo" très facilement à Javascript. Vous pouvez passer le nombre 1 très facilement en Javascript. Vous pouvez passer les valeurs booléennes true y false facilement à Javascript. Mais comment passer ce tableau à Javascript ?

Array ( [1] => elem 1 [2] => elem 2 [3] => elem 3 ) 

La réponse est sérialisation . Dans le cas de PHP/Javascript, JSON est en fait le meilleur format de sérialisation :

{ 1 : 'elem 1', 2 : 'elem 2', 3 : 'elem 3' }

Javascript peut facilement inverser cela en un tableau Javascript réel.

Il s'agit pourtant d'une représentation tout aussi valable de la même structure de données :

a:3:{i:1;s:6:"elem 1";i:2;s:6:"elem 2";i:3;s:7:" elem 3";}

Mais pratiquement seul PHP l'utilise, il y a peu de support pour ce format ailleurs.
C'est pourtant très courant et bien supporté :

<array>
    <element key='1'>elem 1</element>
    <element key='2'>elem 2</element>
    <element key='3'>elem 3</element>
</array>

Il y a beaucoup de situations où vous devez passer structures de données complexes sous forme de chaînes de caractères. La sérialisation, qui consiste à représenter des structures de données arbitraires sous forme de chaînes de caractères, permet de résoudre ce problème.

29voto

tipico Points 291

Utilisation de PHP serialize() unserialize()

http://freeonlinetools24.com/serialize

echo '<pre>';
// say you have an array something like this 
$multidimentional_array= array(
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 4, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 5, 7) 
       ),
    array(
        array("rose", 1.25, 15),
        array("daisy", 0.75, 25),
        array("orchid", 8, 7) 
    )
);

// serialize 
$serialized_array=serialize($multidimentional_array);
print_r($serialized_array);

Ce qui vous donne une sortie comme celle-ci

a:3:{i:0;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:4;i:2;i:7;}}i:1;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:5;i:2;i:7;}}i:2;a:3:{i:0;a:3:{i:0;s:4:"rose";i:1;d:1.25;i:2;i:15;}i:1;a:3:{i:0;s:5:"daisy";i:1;d:0.75;i:2;i:25;}i:2;a:3:{i:0;s:6:"orchid";i:1;i:8;i:2;i:7;}}}

Si vous voulez récupérer le tableau original, utilisez la fonction PHP unserialize().

$original_array=unserialize($serialized_array);
var_export($original_array);

J'espère que cela vous aidera

9voto

Manikandan Points 44
<?php
$a= array("1","2","3");
print_r($a);
$b=serialize($a);
echo $b;
$c=unserialize($b);
print_r($c);

Exécutez ce programme et affichez la sortie

a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}

aquí
a=taille du tableau
i=nombre de numéros du tableau
s=taille des valeurs du tableau

vous pouvez utiliser serialize pour stocker un tableau de données dans une base de données
et peut récupérer et dé-sérialiser les données à utiliser.

7voto

xdazz Points 85907

Lorsque vous voulez rendre votre valeur php stockable, vous devez la transformer en une valeur de type chaîne de caractères, c'est ce que serialize() fait. Et unserialize() fait la chose inverse.

6voto

alex Points 186293

La plupart des supports de stockage peuvent stocker chaîne de caractères types. Ils ne peuvent pas stocker directement une structure de données PHP telle qu'un tableau ou un objet, et ils ne devraient pas, car cela couplerait le support de stockage des données avec PHP.

Au lieu de cela, serialize() vous permet de stocker l'une de ces structures sous forme de chaîne. Il peut être dé-sérialisé à partir de sa représentation en chaîne avec unserialize() .

Si vous êtes familier avec json_encode() y json_decode() (et JSON en général), le concept est similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X