Erro no PHP: Deslocamento indefinido (Undefined offset)

Escrito por steve mcdonnell Google | Traduzido por guilherme vieira
  • Compartilhar
  • Tweetar
  • Compartilhar
  • E-mail

Em PHP, um vetor indexado armazena pares de chave-valor usando números inteiros positivos como chaves. O primeiro elemento do vetor possui a chave zero e os elementos subsequentes são numerados consecutivamente. Um vetor que usa "strings" como chaves é chamado de "vetor associativo". Quando você tenta acessar um elemento do vetor com uma chave inteira, que está fora dos limites do vetor, você receberá um erro de "undefined offset" (deslocamento indefinido). O erro equivalente para um vetor associativo é "undefined index" (índice indefinido).

Outras pessoas estão lendo

Inicialização com a função "array"

Uma das formas de se criar um vetor em PHP é usar a função "array". Passe uma lista ordenada de elementos para a função e o PHP criará uma vetor indexado daqueles elementos, iniciando do zero. Por exemplo:

<?php $dayofweek = array("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); echo $dayofweek[2]; // exibe "Tue" echo $dayofweek[5] // exibe "Fri"

Deslocamento indefinido

Um erro de "undefined offset"(deslocamento indefinido) acontece quando você tentar referenciar um elemento do vetor, usando um índice que não existe. Se você for novato em programação, talvez esqueça que os índices de um vetor começam do zero, e não do um, e terminam com o número de elementos do vetor menos um. Por exemplo, o código a seguir produzirá um erro de deslocamento indefinido porque o vetor "dayofweek" possui sete elementos, de índices de zero a seis, e não há índice sete:

echo $dayofweek[7];

Iniciando através de uma função

Você também pode inicializar um vetor (ou array) atribuindo a ele o valor de retorno de uma função que retorne um vetor, ou passando-o como referência a uma função que modificará um array. Por exemplo:

$array = initialize_array(); // uma função que retorna um vetor

Se você não estiver certo de qual o último elemento no vetor retornado pela função, e tentar acessar um elemento posterior à última chave inteira definida, você também receberá um erro de deslocamento indefinido.

Evitando com contagem

Uma forma de evitar esse erro é controlar as chaves inteiras que você usa com um laço (como o "for"). Use a função "count" para identificar a quantidade de elementos no vetor e crie um laço "for" começando do zero até o último elemento. Por exemplo, o código a seguir calcula a quantidade de elementos no vetor e cria um laço que não excederá os limites dele:

$numdays = count($dayofweek); // retorna 7 for ($i=0; $i<$numdays; $i++) echo "<li>" . $dayofweek[$i] . "</li>"; // elementos numerado de zero até seis

Evitando com a função "isset"

Outra forma de evitar o erro é usar a função "isset". Ela retornará "true" (verdadeiro) ou "false" (falso) dependendo se há um valor na chave especificada. Não ativará o erro de deslocamento indefinido se retornar falso. Antes de tentar referenciar um elemento do vetor, chame "isset" para verificar se ele existe. Por exemplo, o código a seguir incrementa um contador até chegar numa chave fora dos limites do vetor:

$day = -1; while (isset($dayofweek[++$day])) echo "<li>" . $dayofweek[$day] . "</li>";

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível