带有参数的php中的array_map函数

时间:2012-01-05 15:56:23

标签: php arrays

我有这个

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

function myarraymap($item) {
    return $item['user_id'];
}

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

的内容
function myarraymap($item,$item2) {
    return $item['$item2'];
}

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

5 个答案:

答案 0 :(得分:33)

您可以使用anonymous function并以这种方式将局部变量的值传输到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']
);

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

function($item) { return myarraymap($item, 'some_value'); }

答案 1 :(得分:30)

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

$to_trim = array('/some/','/link');
$trimmed = array_map('trim',$to_trim,array_fill(0,count($to_trim),'/'));

比使用自定义函数或其他函数(如array_walk等)

容易得多

* N.B。正如下面的评论中指出的那样,我有点仓促,第三个参数确实需要与array_fill()完成的第二个参数相同。

以上输出:

array(2) {
  [0]=>
  string(4) "some"
  [1]=>
  string(4) "link"
}

答案 2 :(得分:9)

考虑使用array_walk。它允许您传递user_data

答案 3 :(得分:3)

除了创建一个mapper对象外,你无能为力。例如:

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

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

$ids = array_map(array(new customMapper('param2'), 'map'), $data['student_teacher']);

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

答案 4 :(得分:0)

请考虑使用array_map函数中的第三个参数将附加参数传递给callable函数。示例:

<?php

function myFunc($param) {
    echo $param;
}

$array = ['foo', 'bar'];

array_map('myFunc', $array, ['the param']);

// the param
// the param

参考:https://www.php.net/manual/en/function.array-map.php

文档讲述了array_map函数的第三个参数:“要通过回调函数运行的数组参数的补充变量列表。”