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