Consulta de solución a: PHP Notice: Trying to access array offset on value of

Hola buenas tardes, al realizar el ./guaraní regenerar en producción (si esta setado el es_producción = 1 en el bases ini), nos salta el warning de php “PHP Notice: Trying to access array offset on value of type int in /usr/local/proyectos/guarani/vendor/siu-toba/framework/php/modelo/toba_modelo_proyecto.php on line 608”. Notamos que esto nos trae problemas en un reporte personalizado al estar seteado es_producción = 1, en test y desarrollo no, porque no sale dicho error al regenerar . Estamos en la versión 3.20.0 y vimos que en otros post hablaban de que el problema iba a estar resuelto en próximas versiones, como a corto plazo no tenemos programada una actualización de versión abordamos el problema y llegamos a detectar que en el método “get_descripciones_items($datos)” del archivo “toba_modelo_proyecto.php”:

$desc = array();
if (! empty($datos)) {
foreach (array_keys($datos[‘items’]) as $fila) {
$desc[$fila[‘item’]] = $fila[‘nombre’];
}
}
return $desc;

se está haciendo un array_keys de ($datos[‘items’]) lo que devolvería como resultado un array con clave de tipo int y luego en la filia siguiente se intenta acceder al mismo array con una clave de tipo string ej: ‘nombre’ lo que derivaría en el error mencionado arriba, vimos como posible solución no hacer el array_keys de ($datos[‘items’]) para que a $fila se asignen los arrays dentro de $datos[‘items’] y así poder acceder a $fila por la clave de tipo string.

Queríamos saber si esta solución es válida? Por lo que pudimos probar se solucionó el PHP Notice… y todo parece funcionar normal, pero queríamos asegurarnos y consultar previamente a implementarlo.

Saludos y gracias.

Hola Pedro,

Te paso el código de la función tal como quedó corregida en 3.20.1:

private function get_descripciones_items($datos)
{
	$desc = array();
	if (! empty($datos)) {
		foreach (array_keys($datos['items']) as $indx) {
			$fila = $datos['items'][$indx];
			$desc[$fila['item']] = $fila['nombre'];
		}
	}
	return $desc;
}

Pueden usar ese hasta que migren.

Saludos, Florencia.

Muchas gracias Florencia!