laravel - 如果 array_diff 在 Collection->toArray() 上返回 assoc 数组,则 JSON 是对象而不是数组

标签 laravel laravel-5 laravel-5.5

我的问题出在我的 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);

然后我的方法返回$numbersNotYetDrawn(我的 header 接受的是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

最佳答案

替换

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

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

确保元素键已重置,并且数组被视为简单列表并序列化为 JSON 列表 - 而不是被视为关联数组并序列化为 JSON 对象。

关于laravel - 如果 array_diff 在 Collection->toArray() 上返回 assoc 数组,则 JSON 是对象而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711364/

相关文章:

laravel - Laravel 排队作业如何处理已删除的模型作为输入?

php - 拉拉维尔 5.5 : MongoDB & hasManyThrough() relation

Laravel 5.4 和 Vue.js 2.0 发出值而不是 Error 实例

laravel - 添加whereBetween子句不会返回预期结果集

php - 复选框已选中并插入到数据库中

php - 在多个项目上使用 Laravel 5 加密

php - Laravel 5.5 从本地磁盘读取文件

php - Laravel 原始 SQL 查询,具有多次出现的命名绑定(bind)

php - 如何在命令行中使用composer安装最新版本的软件包?

php - Laravel 5.6 : config/logging. php 文件丢失?