你可以在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。
本教程就到此为止。