Menu

Array associativo em PHP: pares de chave e valor

Um array associativo PHP guarda valores sob chaves com nome: $user = ['name' => 'Ada', 'age' => 36]; é lido como $user['name']. Veja como adicionar, alterar e remover pares, percorrer chaves e valores, pegar todas as chaves ou valores, verificar uma chave e ordenar por chave ou por valor.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Um array associativo guarda cada valor sob uma chave que você escolhe, escrita como key => value: $user = ['name' => 'Ada', 'age' => 36];. Leia um valor com $user['name'], e adicione ou altere um atribuindo à chave: $user['email'] = 'ada@example.com';.

Em outras linguagens, a mesma estrutura se chama dicionário, map ou hash. No PHP, é um array comum cujas chaves são strings em vez de 0, 1, 2.

Adicionar, alterar e remover pares

Atribuir a uma chave que não existe a adiciona no fim. Atribuir a uma chave que existe substitui o valor e mantém a posição. unset() remove um par.

array_push() não ajuda aqui: ele só acrescenta valores com chaves numéricas. Para adicionar vários pares de uma vez, use array_merge($stock, $more), em que os novos valores vencem, ou $stock + $more, em que as chaves existentes mantêm os valores; a página sobre array_merge compara os dois.

Percorrer chaves e valores

foreach ($array as $key => $value) percorre os pares na ordem em que foram adicionados. Tire o $key => quando você só precisa dos valores.

Pegar todas as chaves ou todos os valores

array_keys() retorna as chaves como uma lista simples e array_values() retorna os valores, os dois reindexados a partir de 0. Passe um segundo argumento ao array_keys() e ele retorna só as chaves que guardam aquele valor, que é como você encontra todas as chaves de um valor.

Para uma chave, array_search() retorna a primeira correspondência, ou false quando não há nenhuma. A página sobre array_search explica por que você precisa comparar esse resultado com !== false.

Verificar se uma chave existe

isset($arr['key']) é a verificação comum e a mais rápida, mas retorna false quando a chave existe e guarda null. array_key_exists('key', $arr) retorna true nesse caso. Para ler com um valor padrão, o operador ?? faz as duas coisas de uma vez.

Ordenar por chave ou por valor

ksort() ordena pela chave e asort() pelo valor, os dois mantendo cada chave ligada ao seu valor. krsort() e arsort() ordenam ao contrário. Não use sort() num array associativo: ele joga as chaves fora e renumera a partir de 0.

Todas essas funções ordenam no lugar e retornam true, então $sorted = ksort($arr) dá true, não um array. Ordens personalizadas usam uasort() e uksort().

Inverter, contar e converter para JSON

Algumas linhas únicas aparecem o tempo todo com dados de chave e valor: array_flip() troca chaves e valores, array_count_values() conta quantas vezes cada valor aparece, e json_encode() transforma o array num objeto JSON.

Erro comum: ler uma chave que não existe

Ler uma chave ausente retorna null, mas o seu PHP também imprime um aviso:

<?php
$user = ['name' => 'Ada'];
echo $user['phone'];
Warning: Undefined array key "phone" in /var/www/html/index.php on line 3

Dê um valor padrão à leitura com ??, que nunca avisa, ou verifique antes com isset() quando o caso da chave ausente precisar de um ramo próprio.

Dentro de uma string entre aspas duplas, coloque a consulta entre chaves, "{$user['email']}". Sem elas, o PHP só aceita a forma sem aspas "$user[email]", que é fácil de errar.

Perguntas frequentes

Como crio um array associativo em PHP?

Escreva cada par como key => value entre colchetes: $prices = ['apple' => 1.2, 'pear' => 0.9];. Leia um valor com $prices['apple'].

Como ordeno um array associativo por chave no PHP?

Chame ksort($arr); para A a Z ou krsort($arr); para Z a A. Os dois ordenam no lugar, mantêm cada valor com sua chave e retornam true, não o array ordenado.

Como percorro um array associativo no PHP?

Use foreach com as duas variáveis: foreach ($prices as $fruit => $price) { echo "$fruit: $price\n"; }. Os pares saem na ordem em que foram adicionados.

Como pego todas as chaves de um array associativo?

array_keys($arr) retorna as chaves como um array indexado, e array_values($arr) retorna os valores. array_keys($arr, $value) retorna só as chaves cujo valor é igual a $value.

Um array associativo PHP mantém a ordem de inserção?

Sim. Arrays PHP são mapas ordenados, então foreach, print_r e json_encode enxergam os pares na ordem em que você os inseriu, até você ordenar o array com ksort(), asort() ou uma função parecida.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR