Как говорит zneak, массивы Javascript (и, следовательно, JSON) не могут иметь неупорядоченные ключи массива. Таким образом, вам нужно либо смириться с тем, что вы будете работать с объектами JSON, а не с массивами, либо вызывать array_values перед json_encode:
json_encode(array_values($data));
Однако похоже, что вы хотите отобразить данные временных рядов с помощью флота. Как видно на примере временного ряда, это должен быть массив из двух элементов, например:
Это концептуально невозможно. Вы не можете закодировать массив с фиксированными индексами в JSON.
Напоминаем, что массив JSON выглядит так:
[1, 2, 3, 4, 5]
Там нет места для размещения индексов.
Вы должны работать на стороне Javascript. Принимая, что json_encode вернет объект, вы можете преобразовать этот объект в массив. Это не должно быть слишком сложно.
function toArray(object)
{
var result = [];
for (var key in object)
{
if (!key.match(/^[0-9]+$/)) throw new Error("Key must be all numeric");
result[parseInt(key)] = object[key];
}
return result;
}
Ответ 3 · рейтинг 5 · Marc B
Вы можете заставить json_decode() создавать массивы, передав TRUE в качестве второго параметра, но вы не можете заставить json_encode() создавать массивы в первую очередь:
json_decode($json, TRUE); // force array creation
Ответ 4 · Robin
Вы можете использовать array_merge для переиндексации массива с числовым индексом, например:
Для флота то, что вы просите, на самом деле не то, что вы хотите. Вам нужен массив массивов, а не массив чисел. То есть вы хотите что-то похожее на это: