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
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.