Solucionando o erro Notice: Undefined offset do PHP

Um erro muito comum quando mexemos com vetores (arrays) no PHP, é o Notice: Undefined offset. Ele significa que estamos tentando realizar uma operação com um array, buscando por um ítem inexistente. A mensagem de erro que normalmente surge é similar a esta:

Notice: Undefined offset: 5 in /home/meusitemodelo/public_html/teste.php on line 5

Notice Undefined Offset PHP

Um exemplo de código fonte em PHP que irá gerar este erro:

<?php

$estados = array("SP","PB","RS");

echo $estados[5];

?>

Este erro ocorre pois o array $estados , conforme está sendo definido, terá os seguintes valores:

$estados[0] = “SP”;
$estados[1] = “PB”;
$estados[2] = “RS”;

Como estamos tentando chamar a posição 5 do array, por ela ser inexistente, causará o erro Notice: Undefined offset.

Solução 1: Usar o sizeof() para percorrer o array

Este erro pode normalmente ser corrigido implementando o sizeof(). Esta função retorna o número de registros em um array:

<?php

$estados = array("SP","PB","RS");

echo sizeof($estados);

?>

Este código irá nos retornar o resultado 3. Desse modo, o array $estados, possui 3 itens.

Importante: o sizeof() sempre nos retornará uma posição a mais em relação ao índice do array, pois o vetor começa sempre com 0.

A forma correta de se percorrer um vetor:

<?php

$estados = array("SP","PB","RS");

for ($i=0;$i<sizeof($estados);$i++)
{
        echo "$i - $estados[$i] <br>";
}

?>

Este trecho de código irá exibir:

0 – SP
1 – PB
2 – RS

Solução 2: Usar o print_r() como debug para imprimir o array completo

O comando print_r() é muito útil para visualizar de forma completa um array. Igualmente, quando estamos trabalhando com arrays multidimensionais.

Neste exemplo, vamos popular um array multidimensional:

$clientes[0]['nome']="Joao";
$clientes[0]['cidade']="Sao Paulo";

$clientes[1]['nome']="Fabio";
$clientes[1]['cidade']="Belo Horizonte";

$clientes[2]['nome']="Jair";
$clientes[2]['cidade']="Macapa";

Em seguida, vamos incluir no código-fonte o comando print_r:

print_r($clientes);

O resultado, será toda a estrutura do nosso array de forma organizada:

Array
(
   [0] => Array
   (
      [nome] => Joao
      [cidade] => Sao Paulo
   )

   [1] => Array
   (
      [nome] => Fabio
      [cidade] => Belo Horizonte
   )

   [2] => Array
   (
      [nome] => Jair
      [cidade] => Macapa
   )

)

Dessa forma é possível entender exatamente a estrutura do array, e realizar a chamada da forma correta.

Este artigo foi útil?

Obrigado pela resposta!
Gustavo Carvalho

Gustavo Carvalho

Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do Bóris, seu pet de estimação. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos técnicos.

Contato: gustavo.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!