Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有方法获取集合中元素的当前顺序(位置)?_Php_Laravel - Fatal编程技术网

Php 是否有方法获取集合中元素的当前顺序(位置)?

Php 是否有方法获取集合中元素的当前顺序(位置)?,php,laravel,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) 是否有类似的东西,或者我应该做一个集合扩展 谢谢您正在寻找的方法是搜索。

我的意思是:

$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)
是否有类似的东西,或者我应该做一个集合扩展


谢谢

您正在寻找的方法是
搜索
。此方法接受一个值,并返回一个与其对应的键(如果该值在集合中)。如果找不到值,则返回
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版)运行了上述代码,它似乎可以正常工作。

在您的情况下应该可以工作:

$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
}
这应该是有效的-

$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

检查
数组
。数组如何?我知道OP有两个
b
键,但假设是打字错误。如果预期的话,结果集合将只有两个值。在我的回答中,我把它改为
c
,以便于说明。我认为这不起作用。。集合不是由数值组成的,而是相当复杂的关联数组。您在
b=>10
中出错,应该是
c=>10
不,这不是打字错误。这只是一个数组。我认为这是行不通的,因为匹配未满。如果我得到对方付费([['a'=>2],'b'=>5,'c'=>7],'b'=>10]]);但是要按['b'=>5]进行搜索。在这种情况下,它将不起作用。然后必须分别与键值对匹配。这看起来很有希望。。但我不得不删除“->values()”,并将“foreach($item…”更改为“foreach($item->toArray()”,因为这只是一些过程,新的想法总是受欢迎的:)