Función Array_map en php con parámetro

tengo esto

$ids = array_map(array($this, 'myarraymap'), $data['student_teacher']); function myarraymap($item) { return $item['user_id']; } 

Me gustaría poner otro parámetro a mi función para obtener algo así como

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

¿Alguien puede ayudarme? Intenté muchas cosas pero nada funciona

Además de crear un objeto mapeador, no hay mucho que puedas hacer. Por ejemplo:

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

Y luego dentro de su función, en lugar de crear su propio mapeador, use la nueva clase:

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

Esto le permitirá crear un mapeador personalizado que puede devolver cualquier tipo de información … Y puede complejizar su customMapper para aceptar más campos o configuraciones fácilmente.

Puede usar una función anónima y transmitir el valor de la variable local en su segundo argumento myarraymap esta manera:

 function myarraymap($item,$item2) { return $item[$item2]; } $param = 'some_value'; $ids = array_map( function($item) use ($param) { return myarraymap($item, $param); }, $data['student_teacher'] ); 

Normalmente, puede ser suficiente pasar el valor dentro del cuerpo de la función anónima:

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

El array_map de PHP admite un tercer parámetro que es una matriz que representa los parámetros para pasar a la función de callback. Por ejemplo, recortar el / char de todos los elementos de la matriz se puede hacer así:

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

Mucho más fácil que usar funciones personalizadas u otras funciones como array_walk , etc.

* NB Como se señala en los comentarios a continuación, estaba un poco apresurado y el tercer parámetro realmente necesita ser del mismo largo que el segundo que se logra con array_fill() .

Los resultados anteriores:

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

Considera usar array_walk . Le permite pasar user_data .