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.