有没有办法获取集合中元素的当前顺序(地点)?

时间:2018-03-28 11:12:38

标签: php laravel

我的意思是:

$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)

是否有与此类似的内容,或者我应该制作一个集合扩展名?

由于

3 个答案:

答案 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