Конвертировать JSON-ответ в определенный формат? - PullRequest
0 голосов
/ 05 мая 2018

Я не могу напечатать JSON в определенном формате. Я пытался значения в формате вложенного массива. Мой PHP-код

while ($stmtPGBeds->fetch()) {
    $PGBEDS[$count] = array('pgbedid' => $bedid, 'roomnum'=>$roomnum, 
     'roomtype'=>$roomtype, 'spacetype'=>$spacetype, 'price'=>$price,
     'deposit'=>$deposit, 'status'=>$status, 'assetid'=>$assetid);
    $count++;
}

Какие выходы *********

"beds": [
        {
            "bedid": "PGB050418154448673",
            "roomnum": "1",
            "roomtype": "Bedroom",
            "spacetype": "Single",
            "price": "7500",
            "deposit": "10000",
            "status": "0",
            "assetid": "AST050418051246344"
        },
        {
            "bedid": "PGB050418154448119",
            "roomnum": "2",
            "roomtype": "Bedroom",
            "spacetype": "Sharing",
            "price": "5500",
            "deposit": "10000",
            "status": "0",
        }
]

Но я хочу напечатать в следующем формате: В формате, который будет выглядеть ниже.

"beds": [
        {
            "roomnum": "1",
            "roomtype": "Bedroom",
            "spacetype": "Single",
            "assetid": "AST050418051246344"
            "beds": [
                  {
                        "bedid": "PGB050418154448673",
                        "price": "7500",
                        "deposit": "10000",
                        "status": "0",
                  },
                  {
                        "bedid": "PGB050418154448673",
                        "price": "7500",
                        "deposit": "10000",
                        "status": "0",
                  }
             ]
        },
        {
            "roomnum": "2",
            "roomtype": "Bedroom",
            "spacetype": "Single",
            "assetid": "AST050418051246344"
            "beds": [
                  {
                        "bedid": "PGB050418154448673",
                        "price": "7500",
                        "deposit": "10000",
                        "status": "0",
                  },
                  {
                        "bedid": "PGB050418154448673",
                        "price": "7500",
                        "deposit": "10000",
                        "status": "0",
                  }
             ]
        }
]

Как мне это сделать в PHP?

1 Ответ

0 голосов
/ 06 мая 2018

Я бы посоветовал вам взять номер комнаты в качестве ключа массива и использовать array_key_exists в вашем цикле. Смотрите пример ниже:

<code>$response_data = array(
    array("roomnum"=>1, "bedid"=>1, "roomtype"=>"bedroom", "spacetype"=>"single", "price"=>7500, "desposit"=>10000, "status"=>0, "asset_id"=>"AST050418051246344"),
    array("roomnum"=>1, "bedid"=>2, "roomtype"=>"bedroom", "spacetype"=>"single", "price"=>7500, "desposit"=>10000, "status"=>0, "asset_id"=>"AST050418051246345"),
    array("roomnum"=>2, "bedid"=>1, "roomtype"=>"bedroom", "spacetype"=>"single", "price"=>8500, "desposit"=>10000, "status"=>0, "asset_id"=>"AST050418051246346"),
    array("roomnum"=>2, "bedid"=>2, "roomtype"=>"bedroom", "spacetype"=>"single", "price"=>8500, "desposit"=>10000, "status"=>0, "asset_id"=>"AST050418051246347"),
    array("roomnum"=>2, "bedid"=>3, "roomtype"=>"bedroom", "spacetype"=>"single", "price"=>8500, "desposit"=>10000, "status"=>0, "asset_id"=>"AST050418051246348")
);

$output = array();
foreach ($response_data as $value) 
{
    if ( ! array_key_exists($value["roomnum"], $output))
    {
        // lets create a new room 
        $output[$value["roomnum"]] = array(
            "roomnum"=>$value["roomnum"], 
            "roomtype"=>$value["roomtype"], 
            "spacetype"=>$value["spacetype"],
            // ... insert all your room informations here
            // ... 
            "beds"=>array()  // <<-- and create an empty array to store your beds later     

        );
    }

    // now create the array containing all the bed informations
    $bed_data = array(
        "bedid"=>$value["bedid"], 
        "price"=>$value["price"],
        "desposit"=>$value["desposit"],
        "status"=>$value["status"]
    );


    // ... and push it to the already created beds array 
    $output[$value["roomnum"]]["beds"][] = $bed_data; 
}

echo "<pre>".print_r($output, true)."
";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...