我的意思是:
$collection = collect([['a' => 2], ['b' => 5], ['b' => 10]]);
$order = $collection->getOrderOf(['b' => 5]);
// $order should be 1 (if the first element is 0, second - 1, third - 2 and so on)
是否有与此类似的内容,或者我应该制作一个集合扩展名?
由于
答案 0 :(得分:1)
这适用于您的情况:
$collection = collect([['a' => 2], ['b' => 5], ['b' => 10]]);
$pair_to_search = ['b' => 10];
$order = $collection->values()->search(function ($item) use ($pair_to_search){
$key = key($pair_to_search);
foreach($item as $k => $v){
if($k==$key && $v==$pair_to_search[$key])
return $item;
}
});
if($order)
{
//you have index, do what you want
}
答案 1 :(得分:0)
您正在寻找的方法是search
。此方法接受一个值,如果它在集合中,则返回与其对应的键。如果找不到该值,则返回false
。
$collection = collect([['a' => 2], ['b' => 5], ['c' => 10]]);
$collection->search(['a' => 2]); // 0
$collection->search(['b' => 5]); // 1
$collection->search(['c' => 10]); // 2
$collection->search(['c' => 11]); // false
我只是使用Laravel Tinker(版本5.5)运行上面的代码,它似乎没有任何问题。
答案 2 :(得分:0)
这应该有效 -
$collection = collect([['a' => 2], ['b' => 5], ['b' => 10]]);
$check = ['b' => 5];
$index = $collection->search(function ($value, $key) use($check) {
// return key if key value pair matches
return serialize($value) === serialize($check) ? $key : false;
});
echo 'Found at - ' . $index;
<强>输出强>
Found at - 1