function func($v, $k)
{
// key is now $k
return $v * 2;
}
$values = array(4, 6, 3);
$mapped = array_map('func', $values, array_keys($values));
var_dump($mapped);
@Gordon, sí, puedes suministrar array_map() con un número arbitrario de argumentos 🙂
– Aron Rotteveel
3 mayo 2011 a las 11:17
Este es un enfoque muy arriesgado ya que PHP no garantiza que las claves devueltas por array_keys permanecerá en el mismo orden que en la matriz original. Por lo tanto, podría terminar asignando claves a valores incorrectos. El enfoque seguro es utilizar sólo array_keys como segundo argumento de array_map y luego pasar la matriz al cierre con use declaración.
– usuario487772
02/12/2015 a las 21:01
Francamente, no entiendo por qué PHP no tiene una función de mapa que proporcione la clave de cada elemento como segundo parámetro de la devolución de llamada.
– gripe
22 de julio de 2016 a las 9:45
@TimBezhashvyly ¿Puede explicarlo con un enlace a la documentación de PHP? php.net/manual/en/function.array-keys.php No dice nada acerca de que el pedido no esté garantizado.
– gripe
22 de julio de 2016 a las 9:47
Estoy de acuerdo en que es mejor no usar array_keys en esta situación. En cambio, podemos obtener los índices usando: range(0, count($array)-1)
– Dave F.
10 de abril de 2018 a las 4:09
Warbo
Al mapear una función anónima sobre una matriz anónima, no hay forma de acceder a las claves:
array_reduce tampoco tiene acceso a las claves. array_walk puede acceder a las claves, pero la matriz se pasa por referencia, lo que requiere una capa de direccionamiento indirecto.
Algunas soluciones son:
Matriz de pares
Esto es malo, ya que estamos cambiando la matriz original. Además, las llamadas repetitivas “array()” aumentan linealmente con la longitud de la matriz:
Lo interesante a tener en cuenta es que nuestra última función única tiene una firma genérica agradable y se parece mucho a array_map. Podríamos querer darle un nombre a esto y reutilizarlo:
function array_mapk($f, $arr) {
return array_map($f, array_keys($arr), $arr);
}
Nuestro código de aplicación se convierte entonces en:
Al escribir lo anterior, ignoré array_walk ya que requiere que su argumento se pase por referencia; sin embargo, desde entonces me di cuenta de que es fácil solucionar esto usando call_user_func. Creo que esta es la mejor versión hasta ahora:
No hay forma de acceder al índice dentro del array_map llamar de vuelta. Si está trabajando con índices numéricos secuenciales, se podría usar una variable estática incremental:
Array
(
[0] => Index: 0, Value: one
[1] => Index: 1, Value: two
[2] => Index: 2, Value: three
)
Al utilizar este enfoque, es importante utilizar un función anónima como devolución de llamada y nunca reutilizar esa función anónima para evitar hacer referencia a la misma variable estática fuera de array_map.
yannick francois
Es un hilo un poco viejo, pero como muchos de ustedes, estoy usando array_keys :
editar: en lugar de usar una palabra clave, puede agregar dos matrices en el segundo parámetro de su función arrray_map. Creo que no se necesitan explicaciones, el código es bastante simple.
Muy simple:
Solo la función array_map: ¡no tiene clave de índice!
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información