2009-10-12 7 views
0

J'ai un tableau qui contient des données sérialisées similaires à l'exemple ci-dessous.Meilleure façon de désérialiser dans un tableau

Array 
(
    [0] => Array 
     (
      [id] => 4 
      [data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}} 
      [created] => 2009-10-12 18:45:35 
     ) 
    [1] => Array 
     (
      [id] => 3 
      [data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}} 
      [created] => 2009-10-12 17:39:41 

     ) 
    ... 
) 

Quelle serait la meilleure façon de désérialiser la valeur de la clé de données et remplacer les données sérialisés avec son contenu?

J'ai essayé de boucler en utilisant une référence qui fonctionne bien que les deux dernières entrées dans le tableau sont identiques alors qu'elles ne devraient pas l'être.

foreach($data as &$item) { 
    $item['data'] = unserialize($item['data']); 
} 
+1

Votre semble bien. Que voulez-vous dire par "les deux dernières entrées dans le tableau sont identiques alors qu'elles ne devraient pas l'être"? – timdev

+0

Pour une raison quelconque, le dernier résultat du tableau est un clone de celui qui le précède. Je me sens bête, j'ai trop compliqué ce problème pour moi-même, la réponse est assez évidente. – DanCake

Répondre

1

Encore une autre façon:

foreach ($data as $key => $item) { 
    $data[$key]['data'] = unserialize($item['data']); 
} 

Ou:

foreach ($data as $item) { 
    $item['data'] = unserialize($item['data']); 
    $data[] = $item; 
} 
$data = array_slice($data, count($data)/2); 
+0

J'espère que vous n'avez pas pris le dernier exemple. :-) – Gumbo

0

Quelque chose comme ça fonctionnera:

$data2 = array(); 
foreach($data as $item) { 
    $item['data'] = unserialize($item['data']); 
    $data2[] = $item; 
} 

Si vous voulez ne pas utiliser un autre tableau:

foreach($data as $k => $item) { 
    $data[$k]['data'] = unserialize($item['data']); 
} 
3

En utilisant des références dans un foreach -loop peut introduire dur à piste et des comportements mystérieux. Vous devriez utiliser un simple for -loop à la place.

$num = count($data); 
for ($i = 0; $i < $num; $i++) 
{ 
    $item[$i]['data'] = unserialize($item[$i]['data']); 
} 
Questions connexes