【问题标题】:Non empty array becomes null inside the callback function of array_filter [duplicate]非空数组在array_filter的回调函数中变为null [重复]
【发布时间】:2016-12-31 12:50:22
【问题描述】:

我正在尝试比较数组中的一个值,该值在调用 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
});

【问题讨论】:

  • 有不同的范围。尝试将 $stream 也传递给匿名函数。
  • $stream 超出了回调函数的范围......也许function($conversion) use ($stream) {

标签: php arrays array-filter


【解决方案1】:

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

考虑使用 use 构造:

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

Anonymous functions

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

闭包可以从父作用域继承变量。任何此类 变量必须传递给 use 语言结构。

并注意使用和全局变量作用域的区别:

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

【讨论】:

    【解决方案2】:
    $stream = $stream_list[$i]['@attributes']; // IS ARRAY
    
    $chargeable_feature = array_filter($applicable_conversions,function($conversion) use ($stream) {
         return $conversion['FeatureName'] == $stream['FeaturesUsed'];
    });
    

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2017-11-11
    相关资源
    最近更新 更多