Foros del Web » Programando para Internet » PHP »

Array con explode y Notice: Undefined offset:

Estas en el tema de Array con explode y Notice: Undefined offset: en el foro de PHP en Foros del Web. Tengo una funcion: Código PHP: function  get_user ( $campo ) {          $datos = false ;      $ruta  =  'file/archivo.php' ;      $contenido  =  file_get_contents ( ...
  #1 (permalink)  
Antiguo 06/07/2011, 12:29
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Array con explode y Notice: Undefined offset:

Tengo una funcion:
Código PHP:
function get_user($campo) {
        
$datos=false;
    
$ruta 'file/archivo.php';
    
$contenido file_get_contents($ruta);
    
$lineas explode('||'$contenido);
    foreach (
$lineas as $cada_linea) {
        
$campos explode('|'$cada_linea);
        
// Si coincide uno de los tres campos cargamos el array en $datos
        
if($campo == $campos[1] || $campo == $campos[2
        || 
$campo == $campos[3] || $campo == $campos[4])
        {
            
$datos['campo0']=$campos[0];
            
$datos['campo1']=$campos[1]; $datos['campo2']=$campos[2];
            
$datos['campo3']=$campos[3]; $datos['campo4']=$campos[4];
            
            break;
        }
    }
    return 
$datos;

La funcion devuelve un array con todos los campos de una linea cuando encuentra el campo enviado en cualquier posicion.

Aqui suponia que el array ya esta declarado antes del condicionante al asignarle valores con el explode, pero parece que no es asi ya que aunq funciona bien da este aviso al llamar a la funcion:

Cita:
Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 37

Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 41

Notice: Undefined offset: 2 in C:\blabla\blabla.php on line 41

Notice: Undefined offset: 3 in C:\blabla\blabla.php on line 42

Notice: Undefined offset: 4 in C:\blabla\blabla.php on line 42
La linea 37 es la del if y el error lo da el array $campos ya que si pongo ahi la @ no sale el error.

He probado con:
- settype($datos_del_usuario, "array");

y metiendo el if en otro if:

- if (is_array($datos_del_usuario))

Pero me sigue dando el aviso. He visto la documentacion del explode y parece estar correcto.

¿Que tengo mal?
  #2 (permalink)  
Antiguo 06/07/2011, 12:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array con explode y Notice: Undefined offset:

No, el problema no es que la variable no esté definida, pues lo está.

El error es que estás accediendo a un índice que no existe en el array, ya te había mostrado un enlace donde se explica eso mismo:
http://www.forosdelweb.com/f18/undef...riable-923992/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/07/2011, 15:17
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Array con explode y Notice: Undefined offset:

Cierto, me equivoque al exponerlo. Tuve que decir que ya deberia tener un indice puesto que se ha creado el array se le han metido valores.

De entrada no veo que hacer con las respuestas del hilo que me pones. Lo de ? y : es nuevo para mi. Mañana lo miro mejor y me informo de que hace eso, que me escuecen los ojos XD
  #4 (permalink)  
Antiguo 06/07/2011, 15:24
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Array con explode y Notice: Undefined offset:

A eso se le llama operador ternario. Es como un IF pero mucho más corto, mira:
Código PHP:
$foo = (condición) ? si es true si es false;
/********************************/

// Ejemplo:
$foo 1;
$bar = (isset($foo)) ? 'Foo existe' 'Foo no existe';

echo 
$bar//Imprime Foo existe

/*******************************/
//Lo anterior es equivalente a
if (isset($foo)) {
    
$bar 'Foo existe';
}else{
    
$bar 'Foo no existe';

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 08/07/2011, 12:07
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Array con explode y Notice: Undefined offset:

Muchas gracias por la explicación, por tu tiempo y por el que me has ahorrado.

Muy util el opreador ternario :) Lo he usado cuando es una variable simple la hay que declarar y va muy bien. Pero no me funciona para el error del indice del array.

He intentado incluso esto para cada indice

Código PHP:
$campos[0] = isset($campos[0]) ? $campos[0] : null

Hasta he declarado el array primero:

Código PHP:
$campos = array("campo 0","Campo 1","Campo 2","Campo 3","Campo 4"); 
No entiendo como me sale el aviso de Notice: Undefined offset: Si declaro el array y lo relleno antes de la linea del error.

Los avisos de dentro del condicionante me los da el array $datos. lo he declarado asi:
Código PHP:
$datos=array("ftime"=>"","id"=>"","nombre"=>"","clave"=>"","email"=>""); 
Pero me sigue dando el aviso.
  #6 (permalink)  
Antiguo 08/07/2011, 12:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array con explode y Notice: Undefined offset:

Muestra el código que tienes, y los mensajes de error completos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 08/07/2011, 13:35
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Array con explode y Notice: Undefined offset:

El codigo es como el primero pero estableciendo los arrays: $datos y $campos asi:
Código PHP:
Ver original
  1. function get_usuario($campo) {
  2.     $datos=array("id"=>"","nombre"=>"","fecha"=>"","correo"=>"","pass"=>"");
  3.     $campos = array("campo 0","Campo 1","Campo 2","Campo 3","Campo 4");
  4.     $ruta = 'file/archivo.php';
  5.     $contenido = file_get_contents($ruta);
  6.     $lineas = explode('||', $contenido);
  7.     foreach ($lineas as $cada_linea) {
  8.         $campos = explode('|', $cada_linea);
  9.         // Si coincide uno de los cuatro campos cargamos el array en $datos
  10.         if($campo == $campos[1] || $campo == $campos[2]
  11.         || $campo == $campos[3] || $campo == $campos[4])
  12.         {
  13.             $datos['id']=$campos[0];
  14.             $datos['nombre']=$campos[1]; $datos['fecha']=$campos[2];
  15.             $datos['correo']=$campos[3]; $datos['pass']=$campos[4];
  16.            
  17.             break;
  18.         }
  19.     }
  20.     return $datos;
  21. }

Cita:
Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 10

Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 14

Notice: Undefined offset: 2 in C:\blabla\blabla.php on line 14

Notice: Undefined offset: 3 in C:\blabla\blabla.php on line 15

Notice: Undefined offset: 4 in C:\blabla\blabla.php on line 15
Y la llamada a la funcion seria algo como:

Código PHP:
$datos_usuario get_usuario($_SESSION['name']);
print_r($datos_usuario); 
o

Código PHP:
$datos_usuario get_usuario($correo);
print_r($datos_usuario); 
  #8 (permalink)  
Antiguo 08/07/2011, 13:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Array con explode y Notice: Undefined offset:

Mira, fuera del bucle defines $campos, pero dentro del bucle también!!
Código PHP:
$campos = array("campo 0","Campo 1","Campo 2","Campo 3","Campo 4"); 

// ...

$campos explode('|'$cada_linea); 
Es por ende que estas sobre escribiendo el valor, y de ahí el error, ¿de verdad no lo ves?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 08/07/2011, 17:14
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Array con explode y Notice: Undefined offset:

El error lo daba antes de añadir esa linea, que es como estaba en el post inicial.
La puse a modo de declaracion de array para que no me diga que no existe ese indice:

Código PHP:
$campos = array("campo 0","Campo 1","Campo 2","Campo 3","Campo 4"); 
Si la quito sigue dando error.

Ademas, como es posible que cambiar el valor a un array pueda dar error? Entonces no pueden ser variables los arrays? O es que la declaracion del array es de otro tipo que el que relleno con el explode?

No es lo mismo que con la declaracion del array $datos? Ahi tambien le daba un valor inicial y luego se lo cambiaba. Y por supuesto, si quito esa linea sigue dando el mismo error.

El codigo inicial es:

Código PHP:
Ver original
  1. function get_usuario($campo) {
  2.  
  3.         $ruta = 'file/archivo.php';
  4.         $contenido = file_get_contents($ruta);
  5.         $lineas = explode('||', $contenido);
  6.  
  7.         foreach ($lineas as $cada_linea) {
  8.               $campos = explode('|', $cada_linea);
  9.               // Si coincide uno de los cuatro campos cargamos el array en $datos
  10.               if($campo == $campos[1] || $campo == $campos[2]
  11.               || $campo == $campos[3] || $campo == $campos[4])
  12.               {
  13.                   $datos['id']=$campos[0];
  14.                   $datos['nombre']=$campos[1]; $datos['fecha']=$campos[2];
  15.                   $datos['correo']=$campos[3]; $datos['pass']=$campos[4];
  16.  
  17.                   break;
  18.               }
  19.           }
  20.  
  21.           return $datos;
  22.  
  23. }

Las dos declaraciones de arrays las puse a modo de prueba, intentando forzar que exista el indice.

Los errores son:
Cita:
Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 10

Notice: Undefined offset: 1 in C:\blabla\blabla.php on line 14

Notice: Undefined offset: 2 in C:\blabla\blabla.php on line 14

Notice: Undefined offset: 3 in C:\blabla\blabla.php on line 15

Notice: Undefined offset: 4 in C:\blabla\blabla.php on line 15
  #10 (permalink)  
Antiguo 09/07/2011, 11:21
 
Fecha de Ingreso: junio-2011
Mensajes: 45
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Array con explode y Notice: Undefined offset:

Por alguna razon la primera vez que recorre el foreach aun no se asigna ningun valor. Imagino que le molesta la cabecera del archivo. Lo he solucionado asi:

Código PHP:

function get_usuario($campo) {
 
        
$ruta 'file/archivo.php';
        
$contenido file_get_contents($ruta);
        
$lineas explode('||'$contenido);

        foreach (
$lineas as $cada_linea) {
            
$campos explode('|'$cada_linea);
            if(!isset(
$campos[1])){
                  
$datos=NULL;
            }
            
// Si coincide uno de los cuatro campos cargamos el array en $datos
            
else if($campo == $campos[1] || $campo == $campos[2]
            || 
$campo == $campos[3] || $campo == $campos[4])
            {
                  
$datos['id']=$campos[0];
                  
$datos['nombre']=$campos[1]; $datos['fecha']=$campos[2];
                  
$datos['correo']=$campos[3]; $datos['pass']=$campos[4];

                  break;
              }
          }
          return 
$datos;

Si es poco ortodoxo ya me direis.

Etiquetas: explode, notice, undefined
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:14.