Arrays

Os arrays ou matrizes são um grupo de variáveis que possuem o mesmo nome. Porém, cada item deverá ter um índice. A cada item deste array, chamaremos de elemento. 

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

Atribuindo e indexando valores

Indexação numérica - a indexação numérica em PHP não precisa seguir uma ordem numérica; é possível saltar algumas entradas;

$estado[0] = "RS";
$estado[1] = "SC";
$estado[2] = "PR";
$estado[4] = "SP";

Arrays Associativos - além da indexação numérica, pode-se utilizar caracteres para o mesmo fim;

$estado["rs"] = "Rio Grande do Sul";
$estado["sc"] = "Santa Catarina";
$estado["pr"] = "Paraná";

Indexação automática - a utilização dos colchetes vazios, indica ao PHP, que estamos lidando com variáveis do tipo array;

$estado[] = "RS";
$estado[] = "SC";
$estado[] = "PR";
$estado[] = "SP";

O PHP se difere de muitas outras linguagens por dois motivos: 

  1. não é preciso predefinir o tipo de dado do array, i.e., se o mesmo conterá números, texto, dentre outros tipos;
  2. não é preciso especificar o tamanho do array antes que ele seja criado;
Uma outra alternativa de realizar o preenchimento de arrays em PHP é através da função array().

$estados = array ("RS", "SC", "PR", "SP");

Utilizando-se esta notação, estaremos solicitando ao PHP para gerar os 
índices deste array automaticamente. Cabe salientar que o índice começa em zero. 

A função array também permite que seja possível selecionar o índice com o qual se deseja começar o array. O operador => proporciona tal inicialização.

$estados = array (1 =>"RS", "SC", "PR", "SP");

Pode-se também realizar uma indexação de um array associativo, o qual deverá ser feito de forma individual.

$estados = array ("rs" => "Rio Grande do Sul", "sc" => "Santa Catarina", "pr" => "Paraná");

Iteração em Arrays
Seqüenciais
for ($cont = 0; cont <3 ; $cont) {
echo "$estado[$cont]<br>";
}

Capital do Estado:

Não seqüenciais
A busca de informações seqüenciais é bastante simples e trivial. Porém, em arrays não seqënciais, pode-se perder muito tempo varrendo o arquivo de forma serial. Por este motivo, o PHP possui funções específicas para este caso. Abaixo, serão apresentadas algumas delas.

current e key
Quando o PHP está varrendo por um array, ele usa um ponteiro para determinar em que elemento ele está no momento. A função current devolve que elemento do array está sendo usado. Já a key, devolve o índice que o elemento possui.

Exemplo

<?php
$cd[10]="Djavan";
$cd[20]="Caetano";
$cd[30]="Chico";

$index = key($cd);
echo $index; //10 

$valor_corrente = current($cd);
echo $valor_corrente; //Djavan
?>

next e prev
As funções next e prev permitem que se navegue pelo array, movendo o ponteiro para o elemento seguinte ou anterior do array. Ambas as funções recebem o nome do array como argumento.

Exemplo
 

<?php
$cd[10]="Djavan";
$cd[20]="Caetano";
$cd[30]="Chico";

next($cd);
next($cd);

$index = key($cd);
echo $index."<br>"; //30

$valor_corrente = current($cd);
echo $valor_corrente; //Chico
?>

<?php
$cd[10]="Djavan";
$cd[20]="Caetano";
$cd[30]="Chico";

next($cd);
next($cd);
prev($cd);

$index = key($cd);
echo $index."<br>"; //20

$valor_corrente = current($cd);
echo $valor_corrente; //Caetano
?>

Uma outra alternativa é utilizar as funções list e each. Estas funções permitem que se poupem vários loops em vão/vazios. Elas retornam somente os elementos do array que contêm dados.
 
 

<?php
$cd[7]="Djavan";
$cd[22]="Caetano";
$cd[54]="Chico";

while (list($indice, $conteudo) = each($cd))
       echo "$indice -> $conteudo<br>";
?>

7 -> Djavan
22 -> Caetano
54 -> Chico

list retorna o valor do índice primeiro e o conteúdo do elemento depois.

As funções citadas acima também servem para arrays associativos.

Classificação em Arrays

Há várias funções de classificação proporcionadas pelo PHP. Estas, funcionam em conjunto com as funções list e each.

  • sort ( )

  • A função sort pega os conteúdos do array e os classifica em ordem alfabética. Recebe como argumento um nome de array.
     
    <?php
    $cd = array("Djavan","Caetano","Chico");
    while (list($indice, $conteudo) = each($cd))
           echo "$indice -> $conteudo\n";

    sort($cd);

    while (list($indice, $conteudo) = each($cd))
           echo "$indice -> $conteudo\n";
    ?>

    Antes
    0 -> Djavan
    1 -> Caetano
    2 -> Chico

    Depois
    0 -> Caetano
    1 -> Chico
    2 -> Djavan

  • asort ( )
    A função asort possui a "mesma" função de sort, mas é comumente utilizada com arrays associativos, porque após ela ter sido utilizada, não substitui os valores dos índices de string por números. Ela também recebe como argumento um nome de array. Verifique os exemplos abaixo:
     
    <?php

    $estados = array ("rs" => "Rio Grande do Sul", "sc" => "Santa Catarina", "pr" => "Paraná");

    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";

    sort($estados);
    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";
    ?>

    Antes
    rs -> Rio Grande do Sul
    sc -> Santa Catarina
    pr -> Paraná

    Depois
    0 -> Paraná
    1 -> Rio Grande do Sul
    2 -> Santa Catarina


     
    <?php

    $estados = array ("rs" => "Rio Grande do Sul", "sc" => "Santa Catarina", "pr" => "Paraná");

    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";

    asort($estados);
    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";
    ?>

    Antes
    rs -> Rio Grande do Sul
    sc -> Santa Catarina
    pr -> Paraná

    Depois
    pr -> Paraná
    rs -> Rio Grande do Sul
    sc -> Santa Catarina

  • rsort ( ) e arsort ( )

  • As funções rsort e arsort são similares aos seus correspondentes, mas retornam os elemntos do array em ordem alfabética inversa.
     
  • ksort ( )

  • A função ksort organiza normalemnte arrays associativos em ordem alfabética de índices de string. Confira o exemplo:
     
    <?php

    $estados = array ("rs" => "Rio Grande do Sul", "sc" => "Santa Catarina", "pr" => "Paraná");

    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";

    ksort($estados);
    while (list($indice, $conteudo) = each($estados))
           echo "$indice -> $conteudo\n";
    ?>

    Antes
    rs -> Rio Grande do Sul
    sc -> Santa Catarina
    pr -> Paraná

    Depois
    pr -> Paraná
    rs -> Rio Grande do Sul
    sc -> Santa Catarina

Arrays Multi-Dimensionais (fonte: Site oficial do PHP)

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

$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]}";.