www.samueldiasneto.com: Tutorial PHP

<<< Voltar Avançar >>>

8. Arrays

Array com índices numéricos
Array com índices associativos
Arrays bidimensionais
Arrays multidimensionais
Classificando Arrays
Outras funções de processamento de arrays


Array com índices numéricos

Para criar um array use uma construção do tipo:

$cores = array('verde','amarelo','azul','branco');

Para acessar os elementos do array:

echo "A cor do céu é $cores[2]";

o primeiro elemento do array tem o índice zero, assim no nosso array de exemplo:

$cores[0] é verde
$cores[1] é amarelo
$cores[2] é azul
$cores[3] é branco

Assim como as variáveis, os arrays são criados na primeira vez que você os utiliza. O nosso array exemplo poderia ser criado também assim:

$cores[0] = "verde";
$cores[1] = "amarelo";
$cores[2] = "azul";
$cores[3] = "branco";

a primeira linha cria o array e as outras acrescentam elementos.

Como o array tem índices numéricos, podemos acessar os elementos com um loop do tipo:

for($indice=0;$indice<4;$indice++)
  echo "$cores[$indice] "; 

Também podemos usar um loop assim:

foreach ($cores as $cor)
  echo $cor.' ';

Array com índices associativos

O array associativo usa strings como índice. Para criar um array associativo você pode usar uma construçao do tipo:

$notas = array('joão'=>8,'maria'=>9,'josé'=>6);

Para acessar os elementos:

echo $notas['joão'];
echo $notas['maria'];
echo $notas['josé'];

O array associativo também pode ser criado assim:

$notas = array('joão'=>8);
$notas['maria'] = 9;
$notas['josé'] = 6;

A primeira linha cria o array e as outras acrescentam elementos.

Ainda podemos criar o array assim:

$notas ['joão'] = 8;
$notas['maria'] = 9;
$notas['josé'] = 6;

Para acessar os elementos de um array associativo devemos usar um loop assim:

foreach ($notas as $nota_aluno)
  echo $nota_aluno.' ';

observe, porém, que este loop só exibe os valores dos elementos e não seus índices. Para exibir também os índices devemos modificar o loop para:

foreach ($notas as $aluno => $nota)
  echo $aluno.' - '.$nota.'<br>';

Outra maneira seria:

while($elemento = each($notas))
  {
    echo $elemento['key'];
    echo ' - ';
    echo $elemento['value'];
    echo '<br>';  
  }

No código acima, a variável $elemento é um array. key e 0 contém o índice do elemento atual do array $notas e, value e 1 contém o valor do referido elemento. Embora não faça diferença nenhuma qual delas você utiliza, é interessante usar localizações nomeadas(key e value)em vez de numeradas (0 e 1).

Há, ainda, uma construção mais limpa. A função list() pode ser usada para dividir o array em vários valores:

list$($aluno,$nota) = each($notas);

Podemos usar o seguinte loop para acessar todo o array:

while(list$($aluno,$nota) = each($notas))
  echo "$aluno - $nota<br>";

OBSERVAÇÃO: Se, ao usar each(), quisermos utilizar o array duas vezes, teremos que apontar novamente para o início do array usando a função reset().

reset($notas);
while(list$($aluno,$nota) = each($notas))
  echo "$aluno - $nota<br>";

Arrays bidimensionais

Código Descrição Quantidade
A4 Papel A4 500
CAN Caneta esferográfica 100
BOR Borracha 50

Um array pode conter outro array. Isto nos permite criar arrays bidimensionais. Pense num array de duas dimensões como sendo uma matriz como a tabela mostrada acima com linhas e colunas. Cada linha representa um produto e cada coluna é um atributo ou campo do produto. Para expressarmos a tabela acima por meio de um array faríamos assim:

$produtos = array ( array('A4','Papel A4','500'),
                    array('CAN','Caneta esferográfica','100),
		    array('BOR','Borracha','50'));

Para exibir os elementos deste array podemos usar este código:

echo $produtos[0][0].' - '.$produtos[0][1].' - '.$produtos[0][2].'<br>';
echo $produtos[1][0].' - '.$produtos[1][1].' - '.$produtos[1][2].'<br>';
echo $produtos[2][0].' - '.$produtos[2][1].' - '.$produtos[2][2].'<br>';

Podemos também usar dois loops for, um dentro do outro:

for($linha = 0;$linha < 3;$linha++)
  {
     for($coluna = 0;$coluna < 3;$coluna++)
       {
         echo "$produtos[$linha][$coluna] ";
       } 
  }  echo "<br>;

Você também pode usar nomes como índices, ou seja, usar arrays bidimensionais associativos:

$produtos = array (array(Codigo => 'A4',
                         Descricao => 'Papel A4',
			 Quantidade => '500'),
		  (array(Codigo => 'CAN',
		         Descricao => 'Caneta esferográcia',
			 Quantidade => '100'),
		  (array(Codigo => 'BOR',
		         Descricao => 'Borracha',
			 Quantidade => '50'),

Para acessar os elementos deste array bidimensional associativo, poderíamos fazer assim:

for($linha = 0;$linha < 3;$linha++)
  {
    echo "$produtos[$linha]['Codigo'] $produtos[$linha]['Descricao']
          $produtos[$linha][Quantidade]<br>";
  }

ou assim:

for($linha =0;$linha < 3;$linha++)
  {
    while(list($key,$value) = each($produtos[$linha]))
      {
        echo "$value ";
      }
    echo "<br>";  
  }

Arrays multidimensionais

$produtos = array(array ( array('SEC1_A4','Papel A4','500'),        
                          array('SEC1_CAN','Caneta','100),
		          array('SEC1_BOR','Borracha','50'),
			),  
                 array ( array('SEC2_A4','Papel A4','200'),    
                          array('SEC2_CAN','Caneta','300),
		          array('SEC2_BOR','Borracha','150'),
			),
                 array ( array('SEC3_A4','Papel A4','20'),    
                          array('SEC3_CAN','Caneta','400),
		          array('SEC3_BOR','Borracha','250'),
			 )
		);  

Para acessar os elementos deste array:

for($secao = 0;$secao < 3;$secao++)
  {
    echo "Seção $secao<br>";
    for($linha = 0;$linha < 3;$linha++)
      {
        for($coluna = 0;$coluna < 3;$coluna++)
	  {
	    echo "$produtos[$secao][$linha][$coluna] ";
	  }  
        echo "<br>";
      }   
  }

Classificando Arrays

sort($array); //classifica o array com índice numérico

classificando arrays associativos:

asort($array);  // classifica por valores

ksort($array);  // classifica por chaves

classificando na ordem inversa:

rsort($array);

arsort($array);

krsort($array);

classificando arrays bidimensionais

$produtos = array ( array('A4','Papel A4','500'),
                    array('CAN','Caneta esferográfica','100),
		    array('BOR','Borracha','50'));

Para classificar o array acima pela segunda coluna do array use:

function compare($x, $y)
  {
    if($x[1] == $y[1])
      return 0;
    else if($x[1] < $y[1])
      return -1;
    else
      return 1;     
  }

usort($produtos,'compare');

Se você quiser classificar pela primeira coluna basta substituir o índice de x e y, que é 1, por zero. Se quiser classificar pela segunda coluna substitua o índice por 2. A função usort() indica que usaremos uma função definida pelo usuário para a comparação, que no nosso caso é a função compare(). Outras funções disponíveis são:

uasort($array,'função');
uksort($array,'função');

Para classificar o array bidimensional na ordem inversa basta trocar os valore -1 e 1 do return na função definida pelo usuário.


Outras funções de processamento de array

shuffle($array); // mistura os elementos de um array
array_reverse($array); // retorna um array com os elementos na ordem
                          inversa
current($array); // retorna o elemento corrente
each($array); // retorna o par chave/valor do elemento corrente e
                 avança para o próximo elemento
end($array); // aponta para o último elemento
next($array); // aponta para o próximo elemento
pos($array); // retorna o elemento atual
prev($array); // aponta para o elemento anterior
reset($array); // aponta para o primeiro elemento
array_walk($array,'função'); // aplica a função a cada elemento
count($array); // retorna o número de elementos
sizeof($array); // retorna o número de elementos
file(arquivo); // retorna um array cujos elementos são as linhas do arquivo

Para ver a lista completa das funções relacionadas a arrays vá em:
http://www.php. net/manual/pt_BR/ref.array.php

<<< Voltar Avançar >>>