Функция 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'];
}
Кто-нибудь может мне помочь? Я пробовал много вещей, но ничего не работало
Ответы
Ответ 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
: "Список дополнительных переменных аргументов массива, которые должны выполняться через функцию обратного вызова".