Laravel 如果array_diff返回集合上的assoc array->;toArray()

Laravel 如果array_diff返回集合上的assoc array->;toArray(),laravel,laravel-5,laravel-5.5,Laravel,Laravel 5,Laravel 5.5,我的问题在于我的json,我期待一个数组,但我得到一个对象 详情: 我有一组数字: $numbers = [1]; 我从关系中选择“绘制的数字”: 我在这里做了一个->toArray()。我想查找$numbers中未出现在$drawnNumbers中的数字。我是这样做的: $numbersNotYetDrawn = array_diff($numbers, $drawnNumbers); [ 1 ] 然后我的方法返回$numbersNotYetDrawn(我的头接受的是applic

我的问题在于我的json,我期待一个数组,但我得到一个对象

详情:

我有一组数字:

$numbers = [1];
我从关系中选择“绘制的数字”:

我在这里做了一个
->toArray()
。我想查找
$numbers
中未出现在
$drawnNumbers
中的数字。我是这样做的:

$numbersNotYetDrawn = array_diff($numbers, $drawnNumbers);
[
    1
]
然后我的方法
返回$numbersNotYetDrawn
(我的头接受的是application/json)

所以现在问题来了。当
$drawnNumbers
是空数组时,则打印的json是如下所示的常规数组:

$numbersNotYetDrawn = array_diff($numbers, $drawnNumbers);
[
    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);

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

Replace

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


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

我最近遇到了同样的问题,并想知道同样的事情。 我通过添加“array_值”解决了这个问题,但我想知道如何重现它。 我发现当
array_diff
从数组中删除一个不是最后一个元素的元素时,它会被复制。因此:

>>> $x
=> [
     1,
     2,
     3,
     4,
     5,
   ]
>>> array_diff($x, [5]);
=> [
     1,
     2,
     3,
     4,
   ]
>>> array_diff($x, [1]);
=> [
     1 => 2,
     2 => 3,
     3 => 4,
     4 => 5,
   ]

我最近也遇到了同样的问题,我想知道同样的事情。 我通过添加“array_值”解决了这个问题,但我想知道如何重现它。 我发现当
array_diff
从数组中删除一个不是最后一个元素的元素时,它会被复制。因此:

>>> $x
=> [
     1,
     2,
     3,
     4,
     5,
   ]
>>> array_diff($x, [5]);
=> [
     1,
     2,
     3,
     4,
   ]
>>> array_diff($x, [1]);
=> [
     1 => 2,
     2 => 3,
     3 => 4,
     4 => 5,
   ]

谢谢你,这修复了它,这是我正在使用的解决方法。但我试着去理解它。为什么它会成为一个assoc阵列?这是不是实现了
array\u diff
我在文档中没有看到这一点。你能粘贴你传递的实际参数吗?这可能与数据有关,因为我的主要延迟请@jedrzej我的数据在这里--我现在将把它添加到原始帖子中。谢谢你,这修复了它,这是我使用的解决方法。但我试着去理解它。为什么它会成为一个assoc阵列?这是不是实现了
array\u diff
我在文档中没有看到这一点。你能粘贴你传递的实际参数吗?这可能与数据有关,因为我的主要延迟请@jedrzej我的数据在这里--我现在将把它添加到原始帖子中。