2010-03-30 7 views
1

Je dois convertir un code fait par quelqu'un d'autre, de travailler dans mon modèle mvcest ce tableau JSON valide en utilisant php

Il utilise certaines fonctions comme EOD que je ne comprends pas. Est-ce que ça marche encore dans une classe?

Principalement, ma question se concentre sur la sortie de json.

L'ancien code ne pas utiliser la fonction php json_encode, mais il émet directement comme celui-ci

?> 
{ 
     "username": "<?php echo $_SESSION['username'];?>", 
     "items": [ 
      <?php echo $items;?> 
     ] 
} 

<?php 

je le ferais comme ça, mais je dois être sûr que ce qui est bon pour la partie des articles

header('Content-type: application/json'); 

$output = array("username"=> isset($_SESSION['username']) ? $_SESSION['username'] : "?", 
       "items"=>$items 
       ); 
$this->content = json_encode($output); 

Ceci est un peu de contexte sur la façon dont les $ articles sont faits. Un élément est stocké comme ceci:

$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD 
         { 
      "s": "1", 
      "f": "{$to}", 
      "m": "{$messagesan}" 
     }, 
EOD; 

et il est placé dans la variable $ items comme ce

$items = ''; 


if (!empty($_SESSION['openChatBoxes'])) { 
     foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) { 
      $items .= $this->chatBoxSession($chatbox); 
     } 
    } 

//The chatBoxSession() function takes an item from the $_SESSION['chatHistory'] array and returns it. 

J'espère que cela était un peu assez clair? Le manuel PHP avertit que dans certains cas vous n'obtenez pas une sortie de tableau, à la place vous obtenez un objet. Donc, avec la syntaxe EOD, je ne suis pas vraiment sûr.

Cela pourrait me faire gagner du temps si je sais que certaines choses font ce qu'elles supposaient aussi, et donner le bon résultat.

merci, Richard

+0

EOD est juste la syntaxe HEREDOC (ou NOWDOC) n'est ce pas? – alex

+0

quelque chose comme ça, mais je ne suis pas vraiment dans ce J'ai encore besoin de lire cette page de manuel php – Rich

Répondre

1

Ceci est appelé heredoc. Cela fonctionne comme si tout le texte à l'intérieur était une seule chaîne. Ne l'utilisez pas si vous essayez de générer du JSON. Au lieu de cela, utilisez le fait que l'instruction n'est pas fait jusqu'à ce qu'il touche un point-virgule:

$somevar = { 
    "s": "1", 
    "f": "{$to}", 
    "m": "{$messagesan}" 
}; 
+0

merci, et en ajoutant la dernière virgule après la boucle dernière fermeture, vous avez oublié cela. Mais est-ce que j'utilise aussi la bonne manière de sortir les objets. Je json_encode en ajoutant les boucles droites [] lui-même, ou dois-je faire cela? – Rich

+0

Ce que vous avez écrit dans votre réponse est un seul objet, non? Mais la fonction ajax attend un tableau d'éléments. Est-ce que ce serait correct "items" => $ items OU dois-je faire "items" => array ($ items) ????? – Rich

+0

Normalement, vous créez une structure contenant des tableaux linéaires et des tableaux associatifs, et appelez 'json_encode()' pour le transformer en JSON en une seule fois. Que vous ayez ou non besoin d'appeler 'array()' dépend de la structure que vous voulez. –