Saltar al contenido

Aviso de PHP: Desplazamiento indefinido: 1 con array al leer datos

Ya no tienes que investigar más por todo internet porque has llegado al espacio adecuado, tenemos la solución que buscas pero sin problema.

Solución:

Cambio

$data[$parts[0]] = $parts[1];

a

if ( ! isset($parts[1])) 
   $parts[1] = null;


$data[$parts[0]] = $parts[1];

o simplemente:

$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;

No todas las líneas de su archivo tienen dos puntos y, por lo tanto, explotar en él devuelve un array de tamaño 1.

Según php.net posibles valores de retorno de explotar:

Devuelve un array de cadenas creadas al dividir el string parámetro en los límites formados por el delimitador.

Si el delimitador es un vacío string (“”), explotar() devolverá FALSO. Si el delimitador contiene un valor que no está contenido en string y se usa un límite negativo, entonces un vacío array Será devuelto, de lo contrario un array que contiene string Será devuelto.

Cómo reproducir el error anterior en PHP:

php> $yarr = array(3 => 'c', 4 => 'd');

php> echo $yarr[4];
d

php> echo $yarr[1];
PHP Notice:  Undefined offset: 1 in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) : 
eval()'d code on line 1

¿Qué significa ese mensaje de error?

Significa que el compilador php buscó el key 1 y ejecuté el hash contra él y no encontré ningún valor asociado con él y luego dije Undefined offset: 1

¿Cómo hago para que desaparezca ese error?

Pregunta la array Si el key existe antes de devolver su valor de esta manera:

php> echo array_key_exists(1, $yarr);

php> echo array_key_exists(4, $yarr);
1

Si el array no contiene su key, no preguntes por su valor. Aunque esta solución hace doble trabajo para su programa para “comprobar si está allí” y luego “ir a buscarlo”.

Solución alternativa que es más rápida:

Si falta key es una circunstancia excepcional causada por un error, es más rápido simplemente obtener el valor (como en echo $yarr[1];), y detecte ese error de compensación y manéjelo así: https://stackoverflow.com/a/5373824/445131

Actualización en 2020 en Php7:

hay una mejor manera de hacer esto usando el operador de fusión nulo simplemente haciendo lo siguiente:

$data[$parts[0]] = $parts[1] ?? null;

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *