Массивы JSON и PHP

json_encode(array(
    array(0 => "431.940054495913"),
    array(1 => "431.940054495913"),
));

Отображается следующим образом:

[
    ["431.940054495913"],
    {"1":"431.940054495913"}
]

Почему два массива отображаются по-другому?

Ответы

Ответ 1

Любой массив PHP, который может быть представлен как массив JSON, будет отображаться как массив JSON: любой массив PHP, имеющий только последовательные числовые ключи, начиная с 0, будет отображаться как массив JSON.

Это относится к первому массиву: array(0 => "431.940054495913").

Как исправить это

  • Флаг JSON_FORCE_OBJECT отобразит все массивы PHP как объекты JSON

    json_encode(array(0 => "431.940054495913"), JSON_FORCE_OBJECT);
    // {"0": "431.940054495913"}
    
    json_encode(array(0 => "431.940054495913"));
    // ["431.940054495913"]
    
  • Кроме того, вы можете преобразовать ваш массив PHP в объект PHP:

    json_encode( (object) array(0 => "431.940054495913"));
    // {"0": "431.940054495913"}
    

    (если вы не хотите отображать каждый массив как объект или если у вас нет JSON_FORCE_OBJECT)