Laravel搜索:完整指南

297 阅读1分钟

Laravel Collections Search Method Tutorial With Example

你可以在Illuminate/Support/Collection 类中找到集合搜索方法

拉威尔搜索

Laravel search()是一个内置的 集合方法,用于搜索集合中的一个给定值。如果该值存在于集合中, 则返回该值的关键字。如果该值不匹配任何项目,则返回false 。搜索是使用**"宽松 "的**比较方式进行的,也就是说,带有整数值的字符串将被认为等于相同值的整数。

要使用**"严格 "比较,我们必须把true**作为第二个参数传给方法。

public function search($value, $strict = false)
{
     if (! $this->useAsCallable($value)) {
         return array_search($value, $this->items, $strict);
     }

     foreach ($this->items as $key => $item) {
         if (call_user_func($value, $item, $key)) {
             return $key;
         }
     }

     return false;
}

在引擎盖下,collection search()方法调用array_search() 方法。

请看下面的例子。

routes >> web.php 文件中写下以下代码。

<?php

// web.php

Route::get('/', function () {
    $collection = collect([21, 19, 46, 29]);

    echo $collection->search(19)."\n";

});

现在,运行laravel项目,你会看到下面的输出1.这意味着,19在数组中存在,它的键是1,被返回。

现在, 让我们用严格的比较 来搜索。请看下面的代码。

<?php

// app.php

Route::get('/', function () {
    $collection = collect([21, 19, 46, 29]);
    echo $collection->search('19', true);
});

输出将是假的,因为我们是把19 作为一个字符串而不是一个整数来搜索的,而且我们是在严格模式下检查的,因为我们把第二个参数传成了真。

另外,你可以传入你的回调,搜索第一个通过你的真值测试的项目。它将返回第一个项目的索引作为输出。请看下面的代码。

<?php

// app.php

Route::get('/', function () {
    $collection = collect([19, 21, 46, 29]);
    echo $collection->search(function($item, $key) {
        return $item > 19;
    });
});

在上面的代码中,我们正在检查每个集合项是否大于19。现在,21是第一个大于21的元素,它的索引是1。 所以输出将是1。

本教程就到此为止。