数组之间的差异值

问题描述 投票:0回答:1

我根据请求得到了这两个数组:

$f = DocsPf::where('renda', '=', 2)->where('tipo', '=', 'R')->pluck('id');
$f = [4,5,6,7,8,9,10]

还有

$d = Documento::where('user_id', '=', $id)->pluck('cad_doc_id');
[4,5,6,7,8]

现在我只想向模型发出请求,仅了解这些数组之间的差异,例如:

$missing = Docs::where('id', '=', 9)->first();

$missing = Docs::where('id', '=', 10)->first();

我已经做到了

$ids = array_diff($f, $d);
        return $ids;

...正如下面的兄弟所写,但出现了点击错误:

array_diff(): Expected parameter 1 to be an array, object given

请问有什么帮助吗?

php arrays laravel collections difference
1个回答
2
投票

您可以在两个数组上使用

array_diff()
来获取唯一值:

$array1 = [4,5,6,7,8,9,10];
$array2 = [4,5,6,7,8];

$uniqueIds = array_diff($array1, $array2); // `[9, 10]`

$missing = Docs::whereIn("id", $uniqueIds)->get();
// Will return a `Collection` of `Doc` models based on the passed `ids`

-- 编辑 --

如果

$array1
$array2
Collection
,则可以使用
diff()
功能:

$array1 = collect([4,5,6,7,8,9,10]);
$array2 = collect([4,5,6,7,8]);

$uniqueIds = $array1->diff($array2);
$missing = Docs::whereIn("id", $uniqueIds)->get();
// Note: You may need to do `$uniqueIds->toArray()` if it complains further.

还有一种选择,您可以在使用

$array1
 之前将 
$array2
array_diff()

转换为数组
$uniqueIds = array_diff($array1->toArray(), $array2->toArray());

这有点多余,但应该有助于演示数组和

Collection

之间的区别
© www.soinside.com 2019 - 2024. All rights reserved.