Переформатируйте json правильным образом

#php #arrays #json #foreach #decode

Вопрос:

У меня есть этот php-код, поскольку я пытаюсь выполнить определенную функцию в своем php-проекте, я правильно кодирую реализацию, но столкнулся с небольшой проблемой.

                 <?php echo '<script type="text/javascript">';

                $data = array(
                    'base' => 'USD',
                    'alter' => 'ETH',
                    'data' => array()
                );

                foreach ($cryptos as $row) {
                    $sy = $row["symbol"];
                    $data['data'][] = array(
                       "$sy"  => [
                            "rate" => 1.552000000000000,
                            "min" => 1.0077600000000000,
                            "max" => 10.077600000000000,
                            "code" => $row["symbol"],
                            "dp" => 8

                        ],

                    );
                }
                print_r("var fxCur = " . json_encode($data));
 

Запустив приведенный выше код, я получил этот результат ниже, это ожидаемый результат, но я хочу опустить [] между данными

 {
   "base":"USD",
   "alter":"ETH",
   "data":[
      {
         "BTC":{
            "rate": 1.552000000000000,
            "min": 1.0077600000000000,
            "max": 10.077600000000000,
            "code":"BTC",
            "dp":8
         }
      },
      {
         "ETH":{
            "rate": 1.552000000000000,
            "min": 1.0077600000000000,
            "max": 10.077600000000000,
            "code":"ETH",
            "dp":8
         }
      }
   ]
}
 

Но на самом деле я хотел такого результата

 {
   "base":"USD",
   "alter":"ETH",
   "data":{
      "BTC":{
          "rate": 1.552000000000000,
          "min": 1.0077600000000000,
          "max": 10.077600000000000,
         "code":"BTC",
         "dp":8
      },
      "ETH":{
          "rate": 1.552000000000000,
          "min": 1.0077600000000000,
          "max": 10.077600000000000,
         "code":"ETH",
         "dp":8
      },
   
   }
}
 

Ответ №1:

Вы говорите ему, чтобы он построил структуру данных таким образом.

 $data['data'][] = array(
  "$sy"  => [
    ...
  ]
);
 

В этой строке говорится: «добавьте элемент $data['data'] в следующий целочисленный индекс и установите его равным массиву, например [ "BTC" => [ ... ]]

Я думаю, что ты хочешь этого:

 $data['data'][$sy] = [
    "rate" => 1.552000000000000,
    "min" => 1.0077600000000000,
    "max" => 10.077600000000000,
    "code" => $row["symbol"],
    "dp" => 8
];