开发者

How use json in php with a 'complex' structure?

开发者 https://www.devze.com 2023-01-24 12:43 出处:网络
i want use json + php for my data. I read more document to do this, and the basic function are json_decode() and json_encode(). My problem is that, read more document and read different example of str

i want use json + php for my data. I read more document to do this, and the basic function are json_decode() and json_encode(). My problem is that, read more document and read different example of structure have created in me a lot of doubts.

I want create a structure like this begine from the basic to the container:

  • there is a Base, that have 2 property: id and value
  • there is a Operations that can have multiple Base
  • there is a Command that can have multiple Operations (and if possible a property callad name)

the structure in my mind is like this...

[ //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

But i have put the [ and { in the not correct order i think... How can i make a json structure like this? And after set a command to insert a new Operation or remove Operation?

Thank's at all..

//Ok by answer of i made this 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;
  }

  publi开发者_运维百科c 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);

Now the problem is how can i make the revert operation? Such a use of json_decode and incapsulate in its appropriate structure?


The json list type [] is equal to a array without keys in php.

The json dictionary type {}is equal to a keyed array in php.

What you want is something like this:

$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(...),
);


If you're working with PHP I would construct the objects from native PHP Classes (json_encode works with php objects as well):

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

Then it's just a matter of putting these objects in various arrays, which you can also abstract with methods like addToOperation($baseObj) and addToCommands($operationObj).

You're dealing with native data structures (Arrays), so you can use native methods to remove (array_pop) and add (array_push) data.


Something like this should work

// 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);

My syntax may not be perfect but that should give you the idea. To access it then you would use code like

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

Hope this helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号