【问题标题】:How to pass standard php functions to array_map and array_filter?如何将标准 php 函数传递给 array_map 和 array_filter?
【发布时间】:2019-03-03 18:59:38
【问题描述】:

array_maparray_filter 等 PHP 函数采用数组和函数作为参数。

EG:

$result = array_map(function (el) {
// do stuff
}, $elements)

是否可以用同样的方式传递一个标准的php函数?

类似于$result = array_map(boolval, $elements)

编辑 上面的例子抛出错误Undefined constant boolval

【问题讨论】:

  • 为什么不呢?试一试!
  • 未定义常量boolval
  • 应该是:$result = array_map('boolval', $elements);

标签: php


【解决方案1】:

您需要在array_map函数的参数中将函数(用户定义或内置)名称作为字符串传递。

执行以下操作:

$result = array_map('boolval', $elements);

【讨论】:

  • 行得通!除了通过在字符串中传递它的名称之外,还有什么方法可以获取实际的可调用对象 boolval?
  • @indieman 如果您特别想要一个函数而不仅仅是一个字符串,您可以将内置函数包装在一个闭包中,例如$boolval = function($x) { return boolval($x); };。不过,我真的想不出任何需要这样做的上下文。可调用类型声明应始终将字符串转换为其对应的函数。
【解决方案2】:

通常,您只需运行

$result = array_map('functionName', $array);

如果是类函数,则必须在数组中传递对象实例和函数名。

$result = array_map([$objectInstance, 'functionName'], $array);

如果函数在同一个类中,那么

$result = array_map([$this, 'functionName'], $array);

【讨论】:

    【解决方案3】:

    当您有任何函数以callable 作为参数时,PHP 函数将通过其名称作为字符串传递。并且可以使用任何PHP built-inuser-defined 函数,但语言结构除外,例如:array()echoempty()eval()exit()isset()、@9876543325@、@9876 @ 或 unset()。你可以在这里阅读更多内容PHP Callbacks/Callables

    您可以调用任何函数,方法是将其名称作为call_user_func_array 的第一个参数传递,第二个参数传递一个数组,其中包含要调用的函数的参数

    $result = call_user_func_array('array_map', array(
        'boolval', array(
            "1", 
            '0', 
            true, 
            false
        )
    ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多