2010-11-02 14 views
1

J'ai 3 chaînes JSON arrivant avec POST et je veux les fusionner en un tableau bidimensionnel et enregistrer au format JSON à la base de données. Pour cet exemple, j'ai URL de l'image, les descriptions alt et booléens isfavoritePHP fusionner des tableaux en 2D JSON

$url_arr = json_decode('["http://site.com/001.jpg","http://site.com/003.jpg","http://site.com/002.jpg"]'); 
$alt_arr = json_decode('["testing internat chars àèéìòóù stop","second description",""]'); // UTF-8 supported 
$isFav_arr = json_decode('["true", "false", "false"]'); // strings need to be converted to booleans 

// merge into 2 dimensional array 
// $img_arr = array_merge($url_arr, $alt_arr, $isFav_arr); // doesn't work, just add's to the end 
// ... 

// save 2D JSON in database 
$to_db = json_encode($img_arr); 
+0

vous voulez que les trois tableaux d'être dans un tableau, non? et vous voulez enregistrer le JSON de cela dans la base de données, non? – Gordon

+0

oui, c'est vrai .. – FFish

Répondre

1

Juste chaîne concatenate:

$to_db = '[' 
     . '["http://site.com/001.jpg","http://site.com/003.jpg","http://site.com/002.jpg"]' 
     . ',["testing int chars àèéìòóù stop","second description",""]' 
     . ',["true", "false", "false"]' 
     . ']'; 

Sauf si vous voulez travailler avec les valeurs de la chaîne JSON, vous ne avez pas besoin tout en/décodage. Vous pouvez utiliser http://www.jsonlint.com/ pour la valider (enlevé jsonlint et print_rdumps pour faire un peu d'espace)

+0

mmm, oui je pense que .. est ce JSON valide? Je veux dire que je peux json_decode() je dois pouvoir accéder par exemple à l'image 'alt for second image'. – FFish

+0

Je viens d'essayer echo print_r (json_decode ($ to_db)); mais il renvoie 1 ?? Ne serait-il pas mieux quelque chose comme [["001.jpg", "descr 1", false], ["002.jpg", "descr 2", vrai]] – FFish

+0

@FFish Je ne suis pas sûr de comprendre ce que vous êtes demander. Il est valide (après avoir ajouté les virgules manquantes) et si vous voulez envoyer la chaîne Json à la base de données, cela devrait être la méthode préférée car le décodage est coûteux. – Gordon

0

Le peu facile:

$img_arr = array(); 

for ($i=0; $i < sizeof($url_arr); $i++) { 
    $img_arr[] = array($url_arr[$i], $alt_arr[$i], $isFav_arr[$i]); 
} 

Enregistrement à la base de données dépend de quel type de DB que vous utilisez. Regardez les exemples en utilisant soit mysql_query, ou prepared statements (préféré).

+0

merci pour cela, le facile était plus facile que je pensais ... – FFish

+0

échapper à courir si vous voyez une boucle for avec sizeof! Longue vie tableau précalculé longueur – nerkn

1

$ url_arr = json_decode ('[ "http://site.com/001.jpg", "http://site.com/003.jpg","http://site.com/002.jpg "] '); $ alt_arr = json_decode ('["teste les caractères int en s'arrêtant", "seconde description", ""]'); // UTF-8 pris en charge $ isFav_arr = json_decode ('["true", "false", "false"]'); // chaînes doivent être converties en booléens

$ img_arr = array (" urls" => $ url_arr, "alts" => $ alts_arr, "=" favoris> isFav_arr $
); $ results = json_encode ($ img_arr);

// peut-être vous aurez besoin pour nettoyer les index numériques ... avant de construire ensemble multydim

+0

c'est aussi une bonne réponse, mais la solution de Gordon sauve l'encodage json comme dans mon exemple je les ai déjà encodés. à votre santé – FFish