2010-11-12 10 views
2

Je veux utiliser json + php pour mes données. J'ai lu plus de document pour faire ceci, et la fonction de base sont json_decode() et json_encode(). Mon problème est que, lire plus de document et lire différents exemples de structure ont créé en moi beaucoup de doutes.Comment utiliser json en php avec une structure 'complexe'?

Je veux créer une structure comme celle-Begine de la base au conteneur:

  • il y a une base, qui ont 2 propriété: id et la valeur
  • il y a une des opérations qui peuvent avoir plusieurs base
  • il y a une commande qui peut avoir plusieurs opérations (et si possible une propriété de nom callad)

la structure dans mon esprit est comme ça ...

[ //The start of Commands 

    //Can make a property name here like "name":"puls1" 
    [ //Operation1 
{ //Base1 
    "id":"22398", 
    "value":"255" 
}, 
{ //Base2 
    "id":"22657", 
    "value":"80", 
}, 
{ //Base3 
    "id":"7928", 
    "valore":"15" 
} 
    ], 

    [ //Operation2 
{ //Base1 
    "id":"22398", 
    "value":"0" 
}, 
{ //Base2 
    "id":"22657", 
    "value":"0", 
}, 
{ //Base3 
    "id":"7928", 
    "valore":"0" 
} 
    ], 

] //The close of Commands 

Mais j'ai mis le [et {dans le je pense que pour ne pas correct ... Comment puis-je faire une structure JSON comme ça? Et après avoir défini une commande pour insérer une nouvelle opération ou supprimer une opération?

Merci de tout ..

// Ok par réponse je l'ai fait ce code

class Base 
{ 
    var $i; 
    var $value; 

    function __construct($i,$v) 
    { 
    $this->id = $i; 
    $this->value = $v; 
    } 
} 

$a = new Base('1','11'); 
$b = new Base('2','10'); 
$c = new Base ('3','20'); 
$d = new Base ('4','30'); 

class Operation 
{ 
    var $name; 
    var $values = Array(); 

    function __construct($a) 
    { 
    $this->name = $a; 
    } 

    public function addArray($a) 
    { 
    array_push($this->values,$a); 
    } 
} 

$oper1 = new Operation("op1"); 
$oper1->addArray($a); 
$oper1->addArray($b); 

$oper2= new Operation("op2"); 
$oper2->addArray($c); 
$oper2->addArray($d); 

$commands = Array($oper1,$oper2); 

echo json_encode($tot); 

Maintenant, le problème est de savoir comment puis-je faire l'opération revert? Une telle utilisation de json_decode et incapsulate dans sa structure appropriée?

Répondre

2

Si vous travaillez avec PHP je construire les objets de classes PHP natif (json_encode fonctionne avec des objets php ainsi):

class Base { 
    var $id; 
    var $value; 
} 

Ensuite, il suffit de placer ces objets dans différents tableaux, que vous pouvez également utiliser avec des méthodes comme addToOperation($baseObj) et addToCommands($operationObj).

Vous avez affaire à des structures de données natives (Arrays), vous pouvez donc utiliser des méthodes natives pour supprimer (array_pop) et ajouter (array_push) des données.

+0

Avec votre code j'essaye cette classe \t {var \t $ id; \t var $ valeur; \t \t fonction __construct ($ i, $ v) \t { \t \t $ this-> id = $ i; \t \t $ this-> value = $ v; \t}} \t \t \t $ a = new base ('1', '11'); \t $ b = new Base ('2', '10'); \t \t \t $ commans1 = Tableau ($ a, $ b); \t $ commans2 = Tableau ($ a, $ b); \t \t $ tot = Tableau ($ commans1, $ commans2); \t \t echo json_encode ($ tot); Comment puis-je ajouter un nom de propriété aux opérations? – user473349

1

Quelque chose comme cela devrait fonctionner

// Build up your data as a mulitdimensional array 
$data = array(
    'operations' => array(
     0 => array(
      'bases' => array (
      0 => array(
       'id' => '22398', 
       'value' => 'whatever' 
      ), 
      1 => array(
       'id' => 'id goes here', 
       'value' => 'value goes here' 
      ), 
     1 => array(
      //data for operation 2 
     ) 
); 

// Then use json_encode 
$json = json_encode($data); 

Ma syntaxe peut ne pas être parfait, mais qui devrait vous donner l'idée. Pour y accéder, vous devez utiliser le code

$operations = json_decode($data); 
foreach ($operations as $op) { 
    foreach ($op->bases as $base) { 
     //Logic goes here 
     } 
} 

Espérons que cela aide.

+0

Oui, mais je veux un exemple complet de gestionnaire qui structure ... par exemple comment puis-je ajouter d'autres commandes? – user473349

+0

juste mettre les commandes au-dessus de tout le reste $ data = array ('commands' => array (0 => array) Je pense que c'est la meilleure gestion que vous pouvez trouver – Belinda

+0

Si vous voulez donner un nom à la commande peut ajouter un nom avant les opérations en tant que propriété des commandes.Pensez à votre structure comme un tableau multidimensionnel, construisez ce tableau et utilisez json_encode est la meilleure technique pour les données complexes – Belinda

4

Le type de liste json [] est égal à un tableau sans clés dans php.

Le dictionnaire json de type {} est égal à un ensemble de clés en php.

Qu'est-ce que vous voulez est quelque chose comme ceci:

$json = array(
    array(
    array('id' => $num, 'value' => $val), // Base 1 
    array('id' => $num_1, 'value' => $val_1), // Base 3 
    array('id' => $num_2, 'value' => $val_2), // Base 2 
    ), 
    array(...), 
    array(...), 
); 
+0

Très joli ce code ... si je veux avoir une valeur un peut utiliser $ json [0] [0] -> id; Seule une question est là un moyen d'ajouter une propriété au tableau (...) dans mon cas aux opérations? – user473349

Questions connexes