Matrizes

Matrizes agem atualmente como tabelas de 'hashing' (matrizes associativas) e matrizes indexadas (vetores).

Matrizes de Uma Dimensão

O PHP suporta matrizes escalares e associativas. De fato, não há diferença entre as duas. Você pode criar uma matriz usando as funções list() ou array(), ou você pode setar cada valor dos elementos da matriz explicitamente.

 
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
      

Você também pode criar uma matriz simplesmente acrescentando valores à matriz. Quando você atribui um valor a uma variável de matriz usando colchetes vazios, o valor será acrescentado ao final da matriz.

 
$a[] = "olá"; // $a[2] == "olá"
$a[] = "mundo"; // $a[3] == "mundo" 
      

As matrizes podem ser ordenadas usando-se as funções asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), e uksort(), dependendo do tipo de ordenação que você quer.

Você pode contar o número de itens em uma matriz usando a função count().

Você pode atravessar uma matriz usando as funções next() e prev(). Uma outra maneira comum de atravessar uma matriz é com o uso da função each().

Matrizes Multi-Dimensionais

Matrizes multi-dimensionais são bem simples atualmente. Para cada dimensão da matriz, você acrescenta outro valor [chave] no final:

 
$a[1]      = $f;               # exemplos de uma dimensão
$a["foo"]  = $f;   

$a[1][0]     = $f;             # duas dimensões
$a["foo"][2] = $f;             # (você pode misturar índices numéricos e associativos)
$a[3]["bar"] = $f;             # (você pode misturar índices numéricos e associativos)

$a["foo"][4]["bar"][0] = $f;   # quatro dimensões!
      

Em PHP3 não é possível referenciar matrizes multidimensionais diretamente dentro de strings. Por exemplo, o que vem a seguir não terá o resultado desejado:

 
$a[3]['bar'] = 'Bob';
echo "Isto não vai funcionar: $a[3][bar]";
      

Em PHP3, o impresso acima será Isto não vai funcionar: Array[bar]. O operador de concatenação de string, porém, pode ser usado para sobrepôr isto:


$a[3]['bar'] = 'Bob';
echo "Isto não vai funcionar: " . $a[3][bar];
      

Em PHP4, porém, o problema todo pode ser acobertado englobando a referência da matriz (dentro da string) entre chaves:


$a[3]['bar'] = 'Bob';
echo "Isto vai funcionar: {$a[3][bar]}";
      

Você pode "preencher" matrizes multidimensionais de muitas formas, mas a mais fácil de entender é como usar o comando array() para matrizes associativas. Estes dois trechos de código preenchem a matriz unidimensional da mesma forma:

 
# Exemplo 1:

$a["cor"]	= "vermelho";
$a["sabor"]	= "doce";
$a["forma"]	= "redondo";
$a["nome"]	= "maçã";
$a[3]		= 4;

# Exemplo 2:
$a = array(
     "cor" => "vermelho",
     "sabor" => "doce",
     "forma" => "redondo",
     "nome"  => "maçã",
     3       => 4
);
      

A função array() pode ser aninhada para matrizes multidimensionais:

 
<?
$a = array(
     "maçã"  => array(
          "cor"  => "vermelho",
          "sabor"  => "doce",
          "forma"  => "redondo"
     ),
     "laranja"  => array(
          "cor"  => "laranja",
          "sabor"  => "azedo",
          "forma"  => "redondo"
     ),
     "banana"  => array(
          "cor"  => "amarelo",
          "sabor"  => "pastoso",
          "forma"  => "cilíndrico"
     )
);

echo $a["maçã"]["sabor"];    # imprimirá "doce"
?>