Uma das características mais comuns no uso de arrays está no fato de podermos ler seu conteúdo através de um loop e aplicar uma operação específica para cada elemento lido. Existem várias formas de efetuarmos a leitura dos elementos de um array, dependendo somente da forma ocmo estão ordenados (sequencialmente ou não).
Lendo arrays sequenciais
A forma mais simples de ler elementos de um array é utilizar a função count(). Através dela, determinamos o número total de elementos e fazemos a leitura através do comando for.
<?php
$estado = array(“RJ”,”MG”,”MA”);
$total_elementos = count ($estado);
// total_elementos terá o valor igual a 3.
for ($f =0; $f <=$total_elementos -1; $f++) {
echo “Estado: “.$estado[$f].”<br>”;
?>
O navegador irá exibir o seguinte resultado:
Estado: RJ
Estado: MG
Estado: MA
Note que no laço for a variável $f inicia com zero (arrays são zero-based) e tem seu limite em $total_elementos -1 (pois total_elementos é igual a 3).
É comum entre programadores suprimir o uso da variável $total_elementos através da substituição direta da função count() no laço for.
<?php
$estado = array(“RJ”,”MG”,”MA”);
// total_elementos terá o valor igual a 3.
for ($f =0; $f <= (count($estado)-1); $f++) {
echo “Estado: “.$estado[$f].”<br>”;
}
?>
Uma das razões para não fazermos isso é que cada iteração a função count() é chamada. A mais importante diz respeito à alteração do tamanho do array (função unset()) dentro do laço. Se executarmos a função unset, o array terá seu tamanho redimensionado, causando problemas na execução do laço. Vejamos o exemplo, onde o valor “RJ” será excluído do array.
<php
$estado = array(“RJ”,”MG”,”MA”);
for ($f=0; $f <= (count($estado-1); $f++) {
echo “Estado: “.$estado[$f]. “<br>”;
if ($estado[$f]==”RJ” {
unset ($estado[$f]);
}
}
?>
Nesse exemplo, o elemento RJ será impresso e em seguido excluído do array, deixando-o somente dois elementos. Na próxima iteração count(…) não será mais igual a 3 e sim 2, fazendo com que o elemento MA nunca seja lido.
Estado: RJ
Estado: MG
Lendo arrays não sequenciais
Arrays possuem um ponteiro próprio (cursor) que mantém a informação sobre o elemento corrente criado. Quando é criado, esse cursor está sempre sobre o primeiro elemento. Para descobrirmos qual o elemento e o índice corrente, utilizamos a função current() e key(), respectivamente. Vejamos o exemplo:
<?php
$estado = array (50=>”RJ”, 10=>”MG”, 20=”MA”);
$estado[] = “ES”;
$chave = key($estado);
$valor = current($estado);
echo “Elemento $chave igual a $valor”;
?>
Como o array foi recém-criado, o elemento corrente é o primeiro, logo o valor a ser visualizado será “Elemento 50 igual a RJ“. Note que RJ é o primeiro elemento atribuído no array, mesmo “MG” e “MA” possuindo índices menores que o dele (10 e 20, respectivamente). Arrays com esta característica não são ordenados até que seja utilizada uma função específica para essa tarefa.
As funções each() e list() podem ser utilizadas em conjunto para efetuar a leitura, através de um loop de arrays não ordenados sequencialmente. Vejamos um exemplo da utilização de ambas:]
<?php
$estado = array(50=>”RJ”, 10=>”MG”, 20=>”MA”);
$estado[]=”ES”;
reset($estado);
while (list($chave, $valor) = each ($estado)) {
echo “Posição $chave é igual a $valor”.”<br>”;
}
?>
Vamos analisar o código acima. No laço de repetição while, vemos que para cada elemento lido do array é atribuído para a $chave o valor do índice do elemento corrente e para $valor o valor do elemento.
A função reset() “pointeira” para o primeiro elemento do array.
A função each() move o ponteiro do array para o próximo elemento toda vez que é chamada.
Veja abaixo o resultado obtido pelo código acima:
Posição 50 é igual a RJ
Posição 10 é igual a MG
Posição 20 é igual a MA
Posição 51 é igual a ES
Leia também – PHP: O que são arrays?
1 comentário