Php Laravel集合,将where方法替换为filter方法
我有一个集合,我使用Php Laravel集合,将where方法替换为filter方法,php,laravel,Php,Laravel,我有一个集合,我使用where方法仅获取如下匹配的元素: myCollection->where('akey', $value); myCollection->filter(function($value, $key) use ($aValue) { if($key === 'akey' && $value === $aValue) return true; }); 当我尝试使用filter方法对此进行转换时,它失败了: myCollection-
where
方法仅获取如下匹配的元素:
myCollection->where('akey', $value);
myCollection->filter(function($value, $key) use ($aValue) {
if($key === 'akey' && $value === $aValue)
return true;
});
当我尝试使用filter方法对此进行转换时,它失败了:
myCollection->filter(function($value, $key){
if($key === 'akey' && $value === $aValue)
return true;
});
我尝试使用过滤器,因为如果集合中的项的值等于多个值,我希望选择这些项。(where或where或where或where基本上) 我假设
$aValue
是在filter函数之外定义的,您应该像这样将其传递给回调函数:
myCollection->where('akey', $value);
myCollection->filter(function($value, $key) use ($aValue) {
if($key === 'akey' && $value === $aValue)
return true;
});
--编辑--
基于你的例子,我认为这应该是可行的
myCollection->filter(function($item) use ($aValue) {
return $item->aKey === $aValue;
});
我假设
$aValue
是在filter函数之外定义的,您应该像这样将其传递给回调函数:
myCollection->where('akey', $value);
myCollection->filter(function($value, $key) use ($aValue) {
if($key === 'akey' && $value === $aValue)
return true;
});
--编辑--
基于你的例子,我认为这应该是可行的
myCollection->filter(function($item) use ($aValue) {
return $item->aKey === $aValue;
});
我写了一个简单的PHP脚本来描述您的问题,请查看内联注释了解详细信息
<?php
require __DIR__ . '/vendor/autoload.php';
use Illuminate\Support\Collection;
$data = [
[
'akey' => 'the answer',
'avalue' => 'vote up',
],
];
$filterKey = 'the answer';
$c = new Collection($data);
$c = $c->filter(function($val, $key) use ($filterKey) {
var_dump($key); // $key is indexed number, It will output "int(0)"
// return $key == $filterKey; // XXX Here is problem, Try to comment out to see the different.
return $val['akey'] == $filterKey; // Get value from $val, which is associative array.
});
print_r($c->all());
我写了一个简单的PHP脚本来描述您的问题,请查看内联注释了解详细信息
<?php
require __DIR__ . '/vendor/autoload.php';
use Illuminate\Support\Collection;
$data = [
[
'akey' => 'the answer',
'avalue' => 'vote up',
],
];
$filterKey = 'the answer';
$c = new Collection($data);
$c = $c->filter(function($val, $key) use ($filterKey) {
var_dump($key); // $key is indexed number, It will output "int(0)"
// return $key == $filterKey; // XXX Here is problem, Try to comment out to see the different.
return $val['akey'] == $filterKey; // Get value from $val, which is associative array.
});
print_r($c->all());
它仍然返回一个空集合,而
where
用法返回了我对一个限制的期望值。我可以使它工作,但使用了一个匿名函数,该函数只获取一个参数,并且该参数与data_get($param,'aKey')===$aValue
一起使用。我不是Laravel的专家,它能告诉你吗?你能试着用==
代替==
,也许$aValue
和$value
的数据类型不同。检查我的编辑,看看是否有效。因为集合中的$key
可以是索引值,而不是$key
名称。因此,如果您有一个名为aKey
的列,那么我的编辑应该可以工作,它仍然返回一个空集合,而where
用法返回我对一个限制的期望值。我可以使它工作,但使用的匿名函数只能获取一个参数,并且该参数与data\u get($param,'aKey')一起使用=$aValue
。我不是Laravel的专家,它能告诉你吗?你能试着用==
代替==
,也许$aValue
和$value
的数据类型不同。检查我的编辑,看看是否有效。因为集合中的$key
可以是索引值,而不是$key
名称。因此,如果您有一个名为aKey