Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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 Laravel集合,将where方法替换为filter方法_Php_Laravel - Fatal编程技术网

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