我正在尝试比较数组内部的值,该值在调用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
});
答案 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) { ...
匿名函数,也称为闭包,允许创建 没有指定名称的函数。
闭包可以从父作用域继承变量。任何这样的 必须将变量传递给 use 语言构造。
请注意 use 与全局变量范围之间的区别:
从父作用域继承变量与使用不同 全局变量。全局变量存在于全局范围内,即 无论执行什么功能都是一样的。 a的父范围 闭包是声明闭包的功能(不是 必然是从中调用它的功能。