Question:
Date: 17-02-2015 13:50:06
(In Spanish)
Tengo lo siguiente:
La idea es que me arroje una cadena de este tipo
pero a la hora de ejecutar el script me arrija un error diciendo
Cadena para UPDATE dinamica PHP[Resolved]
Buenas Noches,Tengo lo siguiente:
$user_datos = array ( 'nombre'=>'Fulanito', 'apellido'=>'De tal', 'email'=>'tengounperroquepesauna@yahoo.es', ); function claves($datos=array()){ $longitud =count($datos); $set = ""; $i = 0 ; while ($cadena = current($datos)){ $set .= key($datos)." = ' " . $datos[$i] . " ', \n "; next($datos); $i++; } return $set; } print claves($user_datos);
La idea es que me arroje una cadena de este tipo
nombre='Fulanito', apellido='De tal', email='tengounperroquepesauna@yahoo.es'
pero a la hora de ejecutar el script me arrija un error diciendo
Notice: Undefined offset: 0 in usuario.class.php on line 11Votes: 0 - Answers: 6 - Views: 19 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 17-02-2015 14:42:27 No se si me equivoco pero al llamar a la función le estas mandando un array que no esta declarado $info_user deberías enviarle $datos_user Votes: 0 - Link answer
-
Date: 17-02-2015 14:48:24 Ya corrijo ese detalle, es simplemente de redaccion :P Votes: 0 - Link answer
-
-
-
Date: 17-02-2015 15:04:46 SOLUCIONADO
foreach ($datos as $key => $value) { $coma = ($longitud!=($i+1)) ? "," : "" ; $set .= $key." = '".$value."'".$coma."\n"; $i++; }
Votes: 1 - Link answer -
Date: 18-02-2015 06:45:24 Hola Edwin, si bien lo has podido solucionar, tu solución es una alternativa, pero no resuelve el problema "Notice: Undefined offset: 0 in usuario.class.php on line 11" y tampoco demuestra la forma correcta de utilizar un while para iterar datos de un array.
Aquí adjunto la solución para el iterar un array por medio de un while:
$user_datos = array( 'nombre' => 'Fulanito', 'apellido' => 'De tal', 'email' => 'tengounperroquepesauna@yahoo.es', ); function claves($datos = array()) { $set = ""; reset($datos); while (list($clave, $valor) = each($datos)) { $set .= $clave . " = '" . $valor . "', "; } $set = substr($set, 0,-2); return $set; } print claves($user_datos);
Hay un par de detalles a mencionar en el script de tu pregunta que tal vez te sean de ayuda para considerarlos en un próximo script:
Linea 04.: al ser el ultimo elemento del array, no lleva "," final
Linea 11.: el array $datos es un array asociativo (no indexado), al estar usar un indice numérico "$datos[$i]" en un array asociativo se termina obteniendo el "Notice: Undefined offset" mencionado.
Linea 11.: el "\n" se corresponde con un "new line" siempre y cuando el texto sea considerado como "preformateado", para el caso esta de más ya que no es un string que será mostrado en pantalla.
Linea 10. y 12: no esta del todo mal usar las funciones para manejo de array current() y next(), pero para este caso es más adecuado el each() y la asignación por medio de list() como ejemplifico en el script anterior, pero para que no te quedes con la duda de como sería el manejo con estas funciones, aquí un ejemplo utilizando current() y next():
$user_datos = array( 'nombre' => 'Fulanito', 'apellido' => 'De tal', 'email' => 'tengounperroquepesauna@yahoo.es', ); function claves($datos = array()) { $set = ""; reset($datos); while ($valor = current($datos)) { $set .= key($datos) . " = '" . $valor . "', "; next($datos); } $set = substr($set, 0,-2); return $set; } print claves($user_datos);
Algo que me estaba olvidando de mencionar, observa como he quitado la coma de la última iteración, es mucho más performante hacerlo de esta forma:
$set = substr($set, 0,-2);
Para mas detalle puedes ver el uso de la función substr() en el documentación oficial: http://php.net/manual/es/function.substr.php
Espero que mi respuesta te sea de ayuda.
Saludos,
Fernando Votes: 1 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In