New question

Question:

Date: 17-02-2015 13:50:06 (In Spanish)

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 11
Tags: Algorithm - MySQL - PHP - Query - Question - SQL Votes: 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 14:55:00 Ok A veces se pasan esos simples detalles!!   Votes: 0 - Link answer
     
  • Date: 17-02-2015 14:59:35 Pero igual no me da   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
 
frjcbbae garagebible.com