Array_map函数在 php 中带有参数

2022-08-30 11:46:52

我有这个

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

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

我想在我的函数中放置另一个参数,以获得类似的东西

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

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


答案 1

您可以使用匿名函数,并通过以下方式将局部变量的值传输到第二个参数中: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'); }

从 PHP 7.4 开始,您可以使用箭头函数(基本上是具有更简短语法的短匿名函数)来编写更简洁的代码:

$ids = array_map(
    fn($item) => myarraymap($item, $param),
    $data['student_teacher']
);

答案 2

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

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

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

注意:贝正如在下面的评论中指出的那样,我有点仓促,第三个参数确实需要与第二个参数的长度相同,这是用array_fill()完成的

以上输出:

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