Как json_encode ассоциировать массив php с [{x: key1, y: value1}, {x: key2, y: value2}, ...]? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу отобразить две линейные диаграммы с chart.js на одной диаграмме. Поскольку некоторые значения x не идентичны (некоторые отсутствуют в одном наборе данных, некоторые в другом), мне нужны данные для обоих наборов данных в этом формате:

[{x: "key1", y: value1}, 
{x: "key2", y: value2}, 
{x: "key3", y: value3}, 
... 
{x: "key_n", y: value_n}]

Моя отправная точка - два массива php для каждого набора данных (извлеченных из базы данных mysql). JSON-кодированный выход первого массива:

["2019-06-25","2019-06-26","2019-06-27","2019-06-28","2019-06-29","2019-06-30","2019-07-01"] 

Выходной сигнал второго массива в кодировке json:

[3.304,3.24,3.137,3.232,3.279,3.298,3.307]

Chart.js ожидает этот формат:

[{x: "2019-06-25", y: 3.304}, 
{x: "2019-06-26", y: 3.24}, 
{x: "2019-06-27", y: 3.137}, 
{x: "2019-06-28", y: 3.232}, 
{x: "2019-06-29", y: 3.279}, 
{x: "2019-06-30", y: 3.298}, 
{x: "2019-07-01, y: 3.307}]

Я пробовал это так:

$combined = array_combine($leonie_created_at, $weight_leonie);

foreach( $combined as $key=>$val ) {
      $result .= '{' . 'x: ' . $key . ', y: ' . $val . '}';
}

Но результат, закодированный в json:

 "{x: 2019-06-25, y: 3.304}{x: 2019-06-26, y: 3.24}{x: 2019-06-27, y: 3.137}{x: 2019-06-28, y: 3.232}{x: 2019-06-29, y: 3.279}{x: 2019-06-30, y: 3.298}{x: 2019-07-01, y: 3.307}{x: 2019-07-02, y: 3.18}"

У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 02 июля 2019

Вы можете использовать простой цикл foreach с json_encode

$r  = [];
foreach($a1 as $k => $v){
  $r[] = ['x' => $a1[$k], 'y' => $a2[$k]];
}
echo json_encode($r);

https://3v4l.org/1pOhV

...