非空数组在array_filter的回调函数中变为null

时间:2016-08-24 11:43:20

标签: php arrays array-filter

我正在尝试比较数组内部的值,该值在调用array_filter之前初始化。

当控件在array_filter的回调函数内部流动时,数组不为空,但等于null。这可能是什么原因?

$stream = $stream_list[$i]['@attributes']; // IS ARRAY

$chargeable_feature = array_filter($applicable_conversions,function($conversion) {
     return $conversion['FeatureName'] == $stream['FeaturesUsed'];
     // STREAM BECOMES NULL HERE
});

2 个答案:

答案 0 :(得分:3)

$stream = $stream_list[$i]['@attributes']; // IS ARRAY

$chargeable_feature = array_filter($applicable_conversions,function($conversion) use ($stream) {
     return $conversion['FeatureName'] == $stream['FeaturesUsed'];
});

答案 1 :(得分:2)

你不能在函数内使用$stream,它在不同的范围内。

考虑使用 使用 构造:

$chargeable_feature = 
array_filter($applicable_conversions,function($conversion) use ($stream) { ...
  

Anonymous functions

     

匿名函数,也称为闭包,允许创建   没有指定名称的函数。

     

闭包可以从父作用域继承变量。任何这样的   必须将变量传递给 use 语言构造。

请注意 use 与全局变量范围之间的区别:

  

从父作用域继承变量与使用不同   全局变量。全局变量存在于全局范围内,即   无论执行什么功能都是一样的。 a的父范围   闭包是声明闭包的功能(不是   必然是从中调用它的功能。