Я создаю многомерный массив через вызов Ajax для заполнения диаграммы Google (столбец). Однако возвращаемый массив вызывает эту ошибку:
Uncaught Error: Not a valid 2D array.
Это код, который генерирует массив для отправки:
$chartData = array(); $i = 0; foreach ($hourVal as $value) { if($i <= 9){ $chartData[] = array( "0" . $i => (int) $value ); } else { $chartData[] = array( $i => (int) $value ); } $i++; }
Это массив, когда я console.log:
[ [ "Terms", "Visits" ], { 00: 88 }, { 01: 30 }, { 02: 44 }, { 03: 20 } ]
EDIT: я добавляю строку в начале массива, а также json_encode:
array_unshift($chartData, array("Terms","Visits")); echo json_encode($chartData);
Любые идеи, что происходит и как я могу это исправить?
Это не 2D-массив. это массив объектов (и один массив). Когда вы делаете json_encode
, вы получаете массив, только если ваш массив PHP является числовым (индексируется начиная с 0
). В противном случае вы получаете объект (поскольку JavaScript / JSON не имеет «ассоциативных массивов»).
Вы должны убедиться, что ваш массив является числовым и индексированным, начиная с 0
.
$chartData = array(); $i = 0; foreach ($hourVal as $value) { $chartData[] = array( $i => (int) $value ); $i++; }
Я не знаю, почему вы делали "0" . $i
"0" . $i
, но именно это и вызывало вашу проблему. Это создавало «ассоциативный массив», который кодирует как объект.
Я решил это, потому что я отправлял их с префиксом 0, а затем он делал их индексом массива. Пришлось вырезать этот бит и отправить в виде строки. Не желательно, но исправить 🙁