Подтвердить что ты не робот

Функция Array_map в php с параметром

У меня есть это

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

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

Я хочу добавить другой параметр в свою функцию, чтобы получить что-то вроде

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

Кто-нибудь может мне помочь? Я пробовал много вещей, но ничего не работало

4b9b3361

Ответ 1

Помимо создания объекта 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, чтобы легко принимать больше полей или конфигурации.

Ответ 2

Вы можете использовать анонимную функцию и передать значение локальной переменной в свой второй аргумент 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'); }

Ответ 3

PHP array_map поддерживает третий параметр, который представляет собой массив, представляющий параметры для перехода к функции обратного вызова. Например, обрезка / char из всех элементов массива может быть выполнена следующим образом:

$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"
}

Ответ 4

Рассмотрим использование array_walk. Он позволяет передать user_data.

Ответ 5

Попробуйте использовать третий параметр из функции array_map для передачи дополнительного параметра в callable функцию. Пример:

<?php

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

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

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

// the param
// the param
// the param

Ссылка: https://www.php.net/manual/en/function.array-map.php

В документах сказано о третьем параметре из функции array_map: "Список дополнительных переменных аргументов массива, которые должны выполняться через функцию обратного вызова".