带有参数的php中的array_map函数

use*_*834 33 php arrays

我有这个

$ids = array_map(array($this, 'myarraymap'), $data['student_teacher']);

function myarraymap($item) {
    return $item['user_id'];
}
Run Code Online (Sandbox Code Playgroud)

我想在我的函数中添加一个其他参数来获得类似的东西

function myarraymap($item,$item2) {
    return $item['$item2'];
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我吗?我尝试了很多东西,但没有任何效果

Ser*_* S. 37

您可以使用匿名函数并以myarraymap这种方式将局部变量的值传输到第二个参数:

function myarraymap($item,$item2) {
    return $item[$item2];
}

$param = 'some_value';

$ids = array_map(
    function($item) use ($param) { return myarraymap($item, $param); },
    $data['student_teacher']
);
Run Code Online (Sandbox Code Playgroud)

通常,只需在匿名函数体内传递值即可:

function($item) { return myarraymap($item, 'some_value'); }
Run Code Online (Sandbox Code Playgroud)


ouc*_*cil 32

PHP array_map支持第三个参数,该参数是一个表示传递给回调函数的参数的数组.例如,修剪/所有数组元素的char可以像这样完成:

$to_trim = array('/some/','/link');
$trimmed = array_map('trim',$to_trim,array_fill(0,count($to_trim),'/'));
Run Code Online (Sandbox Code Playgroud)

比使用自定义函数或其他函数(如array_walk等)容易得多.

*NB正如下面的评论所指出的,我有点仓促,第三个参数确实需要与第二个完成相同的长度array_fill().

以上输出:

array(2) {
  [0]=>
  string(4) "some"
  [1]=>
  string(4) "link"
}
Run Code Online (Sandbox Code Playgroud)

  • 它似乎不像你描述的那样工作.测试一下.第三个参数需要是一个元素数组 - 这些元素中的每一个都作为参数与被修剪数组中的匹配元素一起传递:`$ trimmed = array_map('trim',array('/ some /','/link'),array('/','/'));` (2认同)

anu*_*ava 9

考虑使用array_walk.它允许你通过user_data.


Mat*_*lin 5

除了创建映射器对象之外,您无能为力。例如:

class customMapper {
    private $customMap = NULL;
    public function __construct($customMap){
        $this->customMap = $customMap;
    }
    public function map($data){
        return $data[$this->customMap];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的函数中,不要创建自己的映射器,而是使用新类:

$ids = array_map(array(new customMapper('param2'), 'map'), $data['student_teacher']);
Run Code Online (Sandbox Code Playgroud)

这将允许您创建一个可以返回任何类型信息的自定义映射器......并且您可以使您的 customMapper 复杂化以轻松接受更多字段或配置。