比较 Laravel 中的两个集合数组

max*_*max 7 php arrays laravel

我正在使用laravel,并且我有两个集合数组,如下所示:

$collection1 = [
    ['id' => 1, 'name'=> 'phone', 'quantity' => 1, 'price' => 1200],
    ['id' => 2, 'name'=> 'tv', 'quantity' => 3, 'price' => 800],
];

$collection2 = [
    ['id' => 1, 'name'=> 'phone', 'quantity' => 1, 'price' => 1200],
    ['id' => 2, 'name'=> 'tv', 'quantity' => 3, 'price' => 400],
];
Run Code Online (Sandbox Code Playgroud)

所以我需要通过比较两个集合来知道它们是否相同。如果在某些数组中,其中一个(或多个)键具有不同的值,则它们将不再是相同的集合,例如,在 1 个集合中,第二个项目的价格值为 800,而另一个集合的价格为 800 400。有 Laravel 集合的任何本机方法可以做到这一点吗?或者我如何使用简单的 php 数组来做到这一点?

TEF*_*EFO 8

laravel 集合有一个名为 diff 的方法,使用此方法您可以获取集合中不存在于给定项目中的项目。项目是 $collection2 ,它可以是数组或集合,因此您可以像这样获取这两个集合之间的不同项目

$collection1->diff($collection2);
Run Code Online (Sandbox Code Playgroud)

它返回一个 Illuminate\Support\Enumerable 类。您可以通过调用 all() 来获取项目:

$collection = collect([1, 2, 3, 4, 5]);

$differentItems = $collection->diff([2, 4, 6, 8]);

$differentItems->all();

// [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)

这段代码属于 laravel 文档。https://laravel.com/docs/7.x/collections#method-diff。最后你可以将 $ differentItems 转换为布尔值。像这样:

$collection = collect([1, 2, 3, 4, 5]);
$differentItems = $collection->diff([2, 4, 6, 8]);
$differentItems->isEmpty();
// return false

$collection = collect([1, 2, 3, 4, 5]);
$differentItems = $collection->diff($collection);
$differentItems->isEmpty();
// return true
Run Code Online (Sandbox Code Playgroud)

更多链接https://laravel.com/api/7.x/Illuminate/Support/Collection.html#method_diff https://laravel.com/api/7.x/Illuminate/Support/Enumerable.html

  • 请通过编辑为您的答案添加一些解释,以便其他人可以从中学习 (2认同)