JSON - это объект вместо массива, если array_diff возвращает ассоциативный массив в Collection-> toArray () - PullRequest
0 голосов
/ 06 июня 2018

Моя проблема в моем json. Я ожидаю массив, но получаю объект.

Подробности:

У меня есть массив чисел:

$numbers = [1];

Я выбираю из отношений "нарисованные числа":

    $drawnNumbers = Ball::whereIn('number', $numbers)->where('game_id', $card->game->id)->get()->map(function($ball) {
        return $ball->number;
    })->toArray();

Я делаю ->toArray() здесь.Я хочу найти числа в $numbers, которых нет в $drawnNumbers.Я делаю так:

$numbersNotYetDrawn = array_diff($numbers, $drawnNumbers);

Мой метод тогда return $numbersNotYetDrawn (мои заголовки принимают application / json).

Так что теперь проблема.Когда $drawnNumbers является пустым массивом, то напечатанный json является обычным массивом, подобным этому:

[
    1
]

Однако, если отношение возвращает $drawnNumbers, чтобы быть массивом с числами, тогда json печатается какобъект:

{
    "0" => 1
}

Кто-нибудь знает, почему это так?В любом случае, чтобы убедиться, что json является массивом?

Редактировать:

Вот мои фактические данные:

$drawnNumbers = Ball::whereIn('number', $numbers)->where('game_id', $card->game->id)->get()->map(function($ball) {
            return $ball->number;
        })->toArray();

$undrawnNumbers = array_diff($numbers, $drawnNumbers);
// $undrawnNumbers = array_values(array_diff($numbers, $drawnNumbers)); // temp fix

1 Ответ

0 голосов
/ 06 июня 2018

Замените

$numbersNotYetDrawn = array_diff($numbers, $drawnNumbers);

на

$numbersNotYetDrawn = array_values(array_diff($numbers, $drawnNumbers));

, чтобы убедиться, что ключи элементов сброшены, а массив обрабатывается как простой список и сериализуется в список JSON, а не какассоциативный массив и сериализованный в объект JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...