Arrays podem ser divididos em duas categorias: enumerativa e associativos.
Enumerativa: As matrizes são indexadas usando apenas os índices numéricos.
Associativos: Permitem a associação de uma chave arbitrária para cada elemento.
No PHP esta distinção pode ficar um pouco confusa, porque, você pode criar uma matriz enumerativa e depois adicionar elementos associativos para ele (mantendo em uma enumeração). Além do mais, as matrizes se comportam mais como mapas e podem usualmente ser usadas para simular um número de estruturas diferentes, incluindo filas e pilhas.
O PHP fornece uma grande quantidade de flexibilidade na forma como chaves numéricas podem ser atribuídas a matrizes: eles podem ser qualquer número inteiro (negativo e positivo), e não necessariamente ser sequencial, de modo que uma grande lacuna pode existir entre os índices de dois valores consecutivos sem a necessidade de criar valores intermédios para cobrir sempre que possível as chaves entre os dois. Além disso, as chaves de um array não determinam a ordem dos seus elementos, como vimos anteriormente, quando criamos uma array com as chaves enumerativa que foram fora da ordem natural.
Quando um elemento é adicionado a um array sem especificar uma chave, o PHP automaticamente atribui um numérico que é igual a maior chave numérica já existente na matriz, mais um:
$a = array (2 => 5);
$a[] = ‘a’; // Esse irá ter a chave com o valor 3
Observe que isso é verdadeiro mesmo se o array contém uma combinação de chaves em sequência numérica:
$a = array (’4’ => 5, ’a’ => ’b’);
$a[] = 44; // Esse irá ter a chave com o valor 5
OBSERVAÇÃO: Note que as chaves da matriz são case-sensitive, mas de tipo insensível. Assim, a chave ‘A’ é diferente da chave ‘a’, mas as chaves “1″ e 1 são os mesmos. No entanto, a conversão só se aplica se uma chave string contém a representação tradicional decimal de um número, assim, por exemplo, a chave ’01′não é a mesma que a chave 1.