DevWebPHP
Image
02/07/2020

Como resolver Notice: undefined index no PHP

# Entendendo o array

Um array no PHP pode ser usado para guardar uma lista de valores, uma matriz de chave-valor, e também outros arrays infinitamente.

No PHP o array pode ser inicializado com a função nativa array() ou pelo atalho [].

$nomeDaVariavel = array('valor1', 'valor2', 'valor3');
// ou
$nomeDaVariavel = ['valor1', 'valor2', 'valor3'];
1
2
3

Para acessar um valor em um array utilizamos o nome da variável seguido de chaves com o índice dentro, assim:

echo $nomeDaVariavel[1]; // valor 2
1

Array em PHP sempre iniciam em 0. Para acessar o primeiro valor de um array, utilize sempre o 0.

Para criar um array de chave-valor fazemos da seguinte forma:

$nomeDaVariavel = ['chave' => 'valor', 'outraChave' => 'outro valor'];
echo $nomeDaVariavel['outraChave']; // outro valor
1
2

Agora se você tentar acessar:

echo $nomeDaVariavel['chaveQueNaoExiste'];
1

Você vai ver o famoso erro Notice: Undefined index.

# Por que acontece?

Primeiro de tudo vamos entender o que a mensagem está dizendo. Isso vale todas linguagens de programação: leia o erro e tente entender o que ele está te dizendo!

Notice: Undefined index email in index.php on line 7 está em inglês então podemos traduzí-la para:

Aviso do PHP: Índice email não definido no arquivo index.php na linha 7

Este erro acontece quando você tenta acessar um índice (ou chave) que não existe em um array.

Vamos ver como o erro acontece num array de chave-valor como no trecho de código abaixo:

$usuarios = [
  ['nome' => 'João da Silva', 'idade' => 18, 'email' => 'joao@email.com'],
  ['nome' => 'Pedro Gonçalves', 'idade' => 19]
];
foreach ($usuarios as $usuario) {
  echo 'Nome: ' . $usuario['nome'];
  echo 'E-mail: ' . $usuario['email'];
}
1
2
3
4
5
6
7
8

O que resultaria no erro:

PHP Notice:  Undefined index: email on line 7
1

Perceba que na declaração da variável $usuarios foi atribuido um array bidimensional, ou seja um array que contém outros arrays, com dois itens cada um contendo outro array de chave e valor.

O primeiro item possui três índices: nome, idade e email já o segundo não possuí o índice email.

Ao executar a linha 7 que acessa o índice email, o PHP não consegue o encontrar e dispara o erro de nível E_NOTICE na tela.

# Resolvendo o erro

Para resolver esse erro vamos primeiro testar se o índice existe antes de acessá-lo, assim não veremos mais esse erro acontecer.

Para testar se um índice existe em um array podemos utilizar a função nativa isset():

foreach ($usuarios as $usuario) {
  echo 'Nome: ' . $usuario['nome'];
  if (isset($usuario['email'])) {
    echo 'E-mail: ' . $usuario['email'];
  }
}
1
2
3
4
5
6

Pronto! Sempre que aparecer o erro dizendo que o índice não foi encontrado num array, teste se ele existe antes de acessá-lo.

Espero ter ajudado! Se tiver qualquer dúvida, pode usar a área de comentários logo a baixo!

Copyright © DevWebPHP 2020