2010-09-07 6 views
0

j'ai un tableau commesérialisation un tableau et le stockage dans DB

$newArray = $_POST[$newId]; 
print_r($newArray); 

il imprime comme

Array ([1] => Yes [2] => a [3] => b [4] => c [5] => d [6] => e [7] => f [8] => [9] => [10] => [11] => [12] => [13] => [14] =>) 

mais lorsque je tente de stocker dans de db après sérialisation comme

serialize($newArray) 

il être stocké comme

s:211:"Array 
(
    [1] => Yes 
    [2] => ab 
    [3] => c 
    [4] => d 
    [5] => e 
    [6] => f 
    [7] => 
    [8] => 
    [9] => 
    [10] => 
    [11] => 
    [12] => 
    [13] => 
    [14] => 
) 

"; 

qui est un élément de tableau unique dans DB ... comment puis-je correctement sérialiser l'élément.

+1

Vous demandez « comment je ne sérialiser correctement l'élément », mais la question est de vous: que considérez-vous comme "sérialisation correcte" d'un tableau dans la BD? Vous n'avez pas partagé votre modèle de données ou vos attentes, il est donc difficile de répondre à votre question. – dkamins

+0

Je suppose que la sérialisation correcte devrait être 'a: 14: {i: 1; s: 3:" Oui "; i: 2; s: 2:" ab "; ...}' –

+0

Etes-vous sûr de bien poster? le tableau? Que retourne 'is_array ($ _ POST [$ newId])'? –

Répondre

4

Il semble que ce soit la sérialisation d'une chaîne, pas d'un tableau. Etes-vous sûr que $newArray est un tableau?

La chaîne renvoyée par serialize commence par 's: 211'. Cela signifie qu'une chaîne a été passée dans serialize(). Si un tableau était passé en serialize(), la chaîne retournée commencerait par 'a: 14'.

+0

Je stockais un tableau dans un champ de texte .... alors je pense qu'il a été converti en chaîne ... comment puis-je le surmonter ..? – Hacker

+2

Non, je voulais dire que vous passez une chaîne à 'serialize()', pas un tableau. –

0

@pradeep où vous stocker $ newArray dans TextField, stocker par serialling

$arrayString = $_POST['newId']; 

Vous obtiendrez tableau seriallized en $ arrayString. Si vous souhaitez utiliser ce tableau avant de le stocker dans la base de données, utilisez unserialize, sinon stockez directement dans la base de données car elle est déjà sérialisée.

$array = unserialize($arrayString); 

Cela permettra de résoudre votre problème

+0

Ce n'est pas la meilleure idée. Et si l'une des cordes contenait une virgule? –

+0

@Rocket J'ai mis à jour ma réponse –

+0

Je ne pense pas que cela fonctionne de cette façon. J'aime mieux la vieille réponse (vous ne pouvez pas avoir une chaîne avec une virgule). –

0

Pas vraiment sûr que je comprends la question, si vous ne voulez pas sérialiser bien, et si vous voulez faire passer d'un champ de texte, peut-être faire la syntaxe personnalisée comme - 1: a; b: 2; c: 3

puis exploser (';', $ chaîne); boucle et pour le résultat, explode (« : », $ lignes)

rendent les délimiteurs plus difficile à entrer en conflit

explode("[[;]]", string); // 1]]:[[b[[;]] 
Questions connexes