keys - Función Array_map en PHP con parámetro
php array reduce (4)
Aparte 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 asignador personalizado que puede devolver cualquier tipo de información ... Y puede complejizar su CustomMapper para aceptar más campos o configuraciones fácilmente.
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 como
function myarraymap($item,$item2) {
return $item[''$item2''];
}
¿Alguien me puede ayudar? Probé muchas cosas pero nada funciona.
Considere el uso de array_walk . Te permite pasar user_data
.
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 devolución de llamada. Por ejemplo, recortar el /
char de todos los elementos de la matriz se puede hacer así:
function myarraymap($item,$item2) {
return $item[$item2];
}
$param = ''some_value'';
$ids = array_map(
function($item) use ($param) { return myarraymap($item, $param); },
$data[''student_teacher'']
);
Mucho más fácil que usar funciones personalizadas u otras funciones como array_walk
, etc.
* NB Como se señaló en los comentarios a continuación, me array_fill()
un poco y el tercer parámetro debe tener la misma longitud que el segundo, lo que se logra con array_fill()
.
Los resultados anteriores:
function($item) { return myarraymap($item, ''some_value''); }
Puede usar una función anónima y transmitir el valor de la variable local a su segundo argumento de myarraymap
esta manera:
$to_trim = array(''/some/'',''/link'');
$trimmed = array_map(''trim'',$to_trim,array_fill(0,count($to_trim),''/''));
Normalmente puede ser suficiente pasar un valor dentro del cuerpo de la función anónima:
array(2) {
[0]=>
string(4) "some"
[1]=>
string(4) "link"
}