¿Puede alguien explicarme por qué no puede pasar una clave como referencia?Alternativas para pasar clave y valor por referencia:
Ex:
if(is_array($where)){
foreach($where as &$key => &$value){
$key = sec($key);
$value = sec($value);
}
unset($key, $value);
}
Lanza:
Fatal error: Key element cannot be a reference in linkstest.php on line 2
¿Puedo hacer algo similar usando array_map? Todo lo que quiero hacer es iterar sobre una matriz asociativa, y escapar de la clave y el valor con mi función sec().
matriz de mapa es difícil de entender para mí:
He intentado muchas cosas con array_map, pero no puedo conseguirlo para actuar sobre las teclas directamente.
¿Obtendré algún beneficio de rendimiento con el uso del mapa de matriz en lugar de utilizar un bucle foreach?
Lo que no me gusta de foreach es que no puedo actuar directamente en la matriz, y tienen que hacer frente a la creación de matrices temporales y desactivándolas:
foreach($where as $key => $value){
$where[secure($key)] = secure($value);
}
Esto puede fallar si se encuentra algo escapar en la clave, agregar un nuevo elemento y mantener el elemento sin guardar.
Entonces, ¿estoy atascado con algo como esto?
$temparr = array();
foreach($where as $key => $value){
$temparr[secure($key)] = secure($value);
}
$where = $temparr;
unset($temparr);
¿Alguna otra alternativa?
Esto se merece un gran viejo * ¿Por qué *? ¿Qué pasa si 'sec ($ key)' da como resultado el valor de otra clave existente? ¿Simplemente sobrescribe la clave existente? Debe explicar por qué en su aplicación una clave podría ser peligrosa. – webbiedave
¿Por qué no podría ser peligroso? Puede cambiar fácilmente las claves $ _POST en formularios o con algo como Tamperdata. Algunas claves que uso en las consultas de mysql. – Ben
No dije que no podrían serlo. Dije que necesita explicar por qué en * su aplicación * una clave podría ser peligrosa. Eso nos dirá cuál es el mejor enfoque para su situación. – webbiedave