у меня есть это
$ids = array_map(array($this, 'myarraymap'), $data['student_teacher']); function myarraymap($item) { return $item['user_id']; }
Я хотел бы добавить другой параметр в свою функцию, чтобы получить что-то вроде
function myarraymap($item,$item2) { return $item['$item2']; }
Может кто-то может мне помочь? Я пробовал много вещей, но ничего не работало
Помимо создания объекта 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, чтобы легко принимать больше полей или конфигурации.
Массив массива PHP поддерживает третий параметр, который представляет собой массив, представляющий параметры для перехода к функции обратного вызова. Например, обрезка /
char из всех элементов массива может быть выполнена следующим образом:
$to_trim = array('/some/','/link'); $trimmed = array_map('trim',$to_trim,array_fill(0,count($to_trim),'/'));
Гораздо проще, чем использовать пользовательские функции или другие функции, такие как array_walk
и т. Д.
* NB Как указано в комментариях ниже, я немного поспешил, и третий параметр действительно должен быть такой же длины, как и второй, который выполняется с помощью array_fill()
.
Вышеуказанные результаты:
array(2) { [0]=> string(4) "some" [1]=> string(4) "link" }
Вы можете использовать анонимную функцию и передать значение локальной переменной в свой второй аргумент 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'); }
Рассмотрим использование array_walk . Он позволяет передавать user_data
.