Прочитав ваш комментарий к другому ответу, я понял, что вы имеете в виду.
Привет @HCK, спасибо за ответ.* * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *1009* * * * * * * * * * * * * * * * Во-первых, этот ответ основан на предположении, что вы делаетечто-то вроде этого на вашем контроллере (вы не опубликовали код контроллера):
return reponse()->json($theResponseFromGetFeaturesMethod);
Поскольку внутри php переменная $theResponseFromGetFeaturesMethod
содержит словарный массив (что-то вроде ["key"=>"value]
), когда вы конвертируете егов JSON вы заметите, что происходит такое «преобразование».
Это происходит потому, что массивы Javascript (и JSON) не поддерживают словарные массивы.Посмотрите этот пример на консоли javascript:
> var a = [];
undefined
> a['key'] = "value"
"value"
> a
> key: "value"
length: 0
__proto__: Array(0)
Обратите внимание, что a
по-прежнему имеет нулевую длину, но теперь у него есть свойство key
.
Это происходит потому, что почти всена JavaScript это на самом деле объект.Таким образом, массив - это особый тип объекта, который имеет push
, pop
и многие другие методы массива.Выполнение array[] = 'somevalue'
на самом деле является ярлыком для array.push('somevalue')
.
Итак, поведение, которое вы наблюдаете, правильное, метод toArray()
работает, как и ожидалось, и преобразование JSON тоже.
Другое странное поведение при попытке преобразовать этот массив PHP в JSON:
[
0 => 'a'
1 => 'b'
9 => 'c'
]
Вы заметите, что в этом случае PHP преобразует этот массив в объекттоже.Результат в JSON будет таким:
{
"0": "a",
"1": "b",
"2": "c"
}
Это также ожидаемое поведение, поскольку синтаксис JSON не поддерживает определение индекса для значения.