Разница между методами Laravel Collection имеет () и содержит () - PullRequest
0 голосов
/ 25 марта 2019

У меня проблемы с пониманием различий между методами Laravel Collection has() и contains().

Метод contains () принимает одно значение, пару параметров ключ-значение или функцию обратного вызова и возвращает логическое значение значения, присутствующего в коллекции или нет.

Таким образом, он возвращает логическое значение, основанное на существовании значения.

has () - возвращает логическое значение, если значение ключа присутствует в коллекцииили нет.

И это также возвращает логическое значение, основанное на существовании значения?

Почему-то я не понимаю их разницы.
Я надеюсь, что кто-то можетобъясните мне или поделитесь полезными ссылками, я был бы очень благодарен.

Ответы [ 3 ]

2 голосов
/ 25 марта 2019

Документация Laravel:

Метод has определяет, существует ли данный ключ в коллекции https://laravel.com/docs/5.8/collections#method-has

Метод содержит определяет, содержит ли коллекция данный элемент: https://laravel.com/docs/5.8/collections#method-contains

Таким образом, метод has проверяет, находится ли заданный ключ в коллекции, тогда как метод содержит проверяет, находится ли заданное значение в коллекции.

2 голосов
/ 25 марта 2019

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 голос
/ 25 марта 2019

Здравствуйте, я думаю, что разница в том, что метод 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 в коллекции. Кроме того, можно указать необязательное значение $, которое будет использоваться для проверки, существует ли данная пара ключ / значение в коллекции.

Пример 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);

удачи;)

...