set_error_handler - Aviso de PHP: Desviación no definida: 1 con matriz al leer datos
php try catch (5)
Estoy recibiendo este error de PHP:
PHP Notice: Undefined offset: 1
Aquí está el código PHP que lo arroja:
$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle); // read in each line
$parts = array_map(''trim'', explode('':'', $line_of_text, 2));
// separates line_of_text by '':'' trim strings for extra space
$data[$parts[0]] = $parts[1];
// map the resulting parts into array
//$results(''NAME_BEFORE_:'') = VALUE_AFTER_:
}
¿Qué significa este error? ¿Qué causa este error?
Este es un "Aviso de PHP", por lo que en teoría podría ignorarlo. Cambiar php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
A
error_reporting = E_ALL & ~E_NOTICE
Esto muestra todos los errores, excepto los avisos.
también puedes intentar eliminar la advertencia ...
error_reporting=0
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, devuelve una matriz de tamaño 1.
De acuerdo con php.net posibles valores de retorno de explode :
Devuelve una matriz de cadenas creadas al dividir el parámetro de cadena en los límites formados por el delimitador.
Si el delimitador es una cadena vacía (""), explotar () devolverá FALSO. Si el delimitador contiene un valor que no está contenido en una cadena y se usa un límite negativo, se devolverá una matriz vacía, de lo contrario se devolverá una matriz que contenga una cadena.
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 de php buscó la clave 1
y ejecutó el hash contra ella y no encontró ningún valor asociado con ella, entonces dijo Undefined offset: 1
¿Cómo puedo hacer que ese error desaparezca?
Pregunte a la matriz si la clave 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 la matriz no contiene su clave, no pregunte por su valor. Aunque esta solución hace doble trabajo para su programa para "verificar si está allí" y luego "buscarlo".
Solución alternativa que es más rápida:
Si obtener una clave faltante es una circunstancia excepcional causada por un error, es más rápido obtener el valor (como en echo $yarr[1];
), capturar ese error de compensación y manejarlo así: https: // . com / a / 5373824/445131
Hace poco tuve este problema y ni siquiera creía que fuera mi mal gusto:
Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)
¡Y realmente lo fue! Acabo de escribir accidentalmente " . " En lugar de " , " ...