Laravel Collection方法has()和contains()之间的区别

时间:2019-03-25 08:56:39

标签: php laravel collections contains

我在理解Laravel收集方法has()contains()之间的区别时遇到了问题。

  

contains()方法采用单个值,键值对参数或回调函数,并返回该集合中是否存在该值的布尔值。

因此,基本上,它会根据值的存在返回一个布尔值。

  

has()-如果集合中不存在键值,则返回一个布尔值。

这还会根据值的存在返回一个布尔值吗?

我不知道他们与众不同。
希望有人能向我解释一下或分享一些有用的链接,我真的很感激。

3 个答案:

答案 0 :(得分:2)

has用于键,contains用于值。

$collection = collect(['name' => 'Desk', 'price' => 100]);

$collection->has('name'); // true
$collection->has('Desk'); // false

$collection->contains('name'); // false
$collection->contains('Desk'); // true

答案 1 :(得分:2)

Laravel文档:

has方法确定集合中是否存在给定键 https://laravel.com/docs/5.8/collections#method-has

contains方法确定集合是否包含给定的项目: https://laravel.com/docs/5.8/collections#method-contains

所以has方法检查集合中是否有给定键,而contains方法检查集合中是否有给定值。

答案 2 :(得分:1)

你好,我认为区别在于has()方法仅搜索例如键:

$collection = collect(['account_id' => 1, 'product' => 'Desk', 'amount' => 5]);

$collection->has('product');

// true

$collection->has(['product', 'amount']);

// true

$collection->has(['amount', 'price']);

// false

和contains方法()用于确定集合中是否存在给定的$ key。此外,可以指定一个可选的$ value,该值将用于检查集合中是否存在给定的键/值对。

示例1:最基本的用法:

use Illuminate\Support\Collection;

// Create a new collection instance.
$collection = new Collection([
    'bear',
    'whale',
    'chicken',
    'tardigrade'
]);

// true
$collection->contains('bear');

// true
$collection->contains('tardigrade');

// false
$collection->contains('dog');

示例2:使用contains方法检查包含数组作为项的集合中是否存在给定的键/值对:

use Illuminate\Support\Collection;

// Create a new collection instance.
$collection = new Collection([
    ['big'     => 'bear'],
    ['bigger'  => 'whale'],
    ['small'   => 'chicken'],
    ['smaller' => 'tardigrade']
]);

// true
$collection->contains('big', 'bear');

// true
$collection->contains('smaller', 'tardigrade');

// false
$collection->contains('smaller', 'paramecium');

示例3:使用假设的User类在对象集合上使用:

use Illuminate\Support\Collection;

class User
{

    /**
     * A hypothetical user's first name.
     * 
     * @var string
     */
    public $firstName = '';

    /**
     * A hypothetical user's favorite number.
     * 
     * @var integer
     */
    public $favoriteNumber = 0;

    public function __construct($firstName, $favoriteNumber)
    {
        $this->firstName      = $firstName;
        $this->favoriteNumber = $favoriteNumber;
    }

}

// Create a new collection instance.
$collection = new Collection([
    new User('Jane', 7),
    new User('Sarah', 9),
    new User('Ben', 2)
]);

// true
$collection->contains('firstName', 'Jane');

// false
$collection->contains('firstName', 'Josh');

// false
$collection->contains('lastName', 'Jane');

// true
$collection->contains('favoriteNumber', 2);

祝你好运;)