2015-11-26 8 views
0

Эти пункты должны быть объединены в переменную JSON, включая детали магазина:PHP с вложенной JSON

{ 
"Name": "Shop 1", 
"Time": "2015-12-01 12:50", 
"Items": [ 
    { 
    "Name": "Item-1", 
    "Count": "4", 
    "Charge": "100" 
    }, 
    { 
    "Name": "Item-3", 
    "Count": "4", 
    "Charge": "100" 
    } 
    ], 
"Total": "800" 
} 

Чтобы получить внешнюю JSON часть я использую:

class PrintData { 
    public $Name = ""; 
    public $Time = ""; 
    // ?? 
    public $Total = ""; 
} 

$printdata = new PrintData(); 
$printdata->Name=$shop_name; 
$printdata->Time=$os_tsready; 
// ?? $printdata->Item=$printitems; 
$printdata->Total=1007; 

Однако, я не могу понять как я могу получить две строки позиции в JSON.

foreach($orderrecords as $or) { 
    $o_name=escape($or->o_name); 
     $o_cout=escape($or->o_count); 
     $o_charge=escape($or->o_charge); 

Как я могу правильно добавить записи элементов?

ответ

-1

$printitems должен быть массив здесь.

$printitems = array(
    array('Name' => 'Item-1', 'Count' => '4', 'Charge' => '100'), 
    array('Name' => 'Item-3', 'Count' => '4', 'Charge' => '100') 
); 

Финальный код

<?php 

class PrintData { 
    public $Name = ""; 
    public $Time = ""; 
    // ?? 
    public $Total = ""; 
} 

$printdata = new PrintData(); 
$printdata->Name= 'Shop 1'; 
$printdata->Time='2015-12-01 12:50'; 
// ?? $printdata->Item=$printitems; 
$printdata->Total='800'; 

$printitems = array(
    array('Name' => 'Item-1', 'Count' => '4', 'Charge' => '100'), 
    array('Name' => 'Item-3', 'Count' => '4', 'Charge' => '100') 
); 

$printdata->Item = $printitems; 

echo '<pre>'; 
// TILL NOW $printdata is an Object 
// json_encode() converts $printdata into JSON Object 
print_r(json_encode($printdata)); // THIS WILL GIVE YOUR DESIRED RESULT 
0

Попробуйте это:

class PrintData { 
    public $Name = ""; 
    public $Time = ""; 
    public $Items = []; 
    public $Total = ""; 
} 

$printdata = new PrintData(); 
$printdata->Name=$shop_name; 
$printdata->Time=$os_tsready; 
$printdata->Items=$printitems; 
$printdata->Total=1007; 

Где $printitems является массивом $item элементов (например, ниже)

и индивидуально,

$item = array(
    "Name" => "Item-1", 
    "Count" => "4", 
    "Charge" => "100" 
); 
$printdata->Items[0] = $item; 

Интернет код: https://3v4l.org/R4s2C

+0

Я попробовал этот код. Я использую '$ printitems-> Items [] = $ item', таким образом он заполняет все элементы, но компилирует его как:' "Items": {"Items": [{"Name": "' .... с '{" Items ":' слишком много в коде. –

+0

См. эту ссылку https://3v4l.org/R4s2C (рабочий код в онлайн-оценщике php) –

0

Полностью OOP подход:

class Item { 
    public $Name; 
    public $Count; 
    public $Charge; 

    public function __construct($name, $count, $charge) { 
    $this->Name = $name; 
    $this->Count = $count; 
    $this->Charge = $charge; 
    } 
} 

class PrintData { 
    public $Items; 
    public $Name; 
    public $Time; 
    public $Total; 

    public function __construct($name, $time, $items, $total) { 
    $this->Name = $name; 
    $this->Time = $time; 
    $this->Total = $total; 
    $this->Items = $items; 
    } 
} 

$res = new PrintData(
    "Shop 1", 
    "2015-12-01 12:50", 
    array(
    new Item("Item-1", "4", "100"), 
    new Item("Item-3", "4", "100"), 
), 
    "800" 
); 

echo json_encode($res); 
Смежные вопросы