Aplicativos em PHP/Trabalhando em PHP com/Arrays
Trabalhando com Arrays
Um array é uma variável, mas diferente das demais ele armazena uma coleção de valores e não somente um. E ainda por cima podem conter outras variáveis e de tipos diferentes.
Detalhe importante: Quando em uma função precisarmos rtornar mais de um valor array é a saída, basta retornar todos os valors em forma de array.
Além disso é semelhante ao que estudamos na matemática: linhas e colunas. Matriz 3x4 (3 linhas e 4 colunas).
Um array no PHP é um mapa ordenado, que relaciona valores com chaves (em linhas e colunas).
Especificando um array()
array([chave =>] valor, ...);
A chave pode ser uma string ou um inteiro.
O valor pode ser qualquer coisa.
Algumas das funções
Essas funções abaixo permitem a interação e manipulação de arrays de várias formas. Arrays são essenciais para armazenar, gerenciar, operar sobre um conjunto de variáveis.
Arrays (matrizes) simples e multidimensionais são suportados e podem ser criados pelo usuário ou por outras funções. Existem diversas funções específicas para bancos de dados, que preenchem arrays com os dados retornados em consultas, e vários outros tipos de funções também retornam arrays.
array_fill -- Preenche um array com valores
array array_fill ( int start_index, int num, mixed value )
<?php $a = array_fill(5, 6, 'banana'); print_r($a); ?>
array_merge -- Funde dois ou mais arrays
array array_merge ( array array1, array array2 [, array ...] )
<?php $array1 = array(); $array2 = array(1 => "data"); $result = array_merge($array1, $array2); ?>
Não esqueça que as chaves numéricas serão reordenadas!
Array ( [0] => data )
Se você quer preservar os arrays e apenas concatená-los, o operador +:
<?php $array1 = array(); $array2 = array(1 => "data"); $result = $array1 + $array2; ?>
As chaves numéricas serão preservadas e as associações originais permanecem.
array_pad -- Expande um array para um certo comprimento utilizando um determinado valor
array array_pad ( array input, int pad_size, mixed pad_value )
Exemplo 1. Exemplo de array_pad()
<?php $input = array(12, 10, 9); $result = array_pad($input, 5, 0); // $result é array(12, 10, 9, 0, 0) $result = array_pad($input, -7, -1); // $result é array(-1, -1, -1, -1, 12, 10, 9) $result = array_pad($input, 2, "noop"); // Não será expandido. ?>
array_pop -- Retira um elemento do final do array
mixed array_pop ( array array )
<?php $cesta = array("laranja", "banana", "melancia", "morango"); $fruta = array_pop($cesta); print_r($cesta); ?>
array_push -- Adiciona um ou mais elementos no final de um array
int array_push ( array array, mixed var [, mixed ...] )
<?php $cesta = array("laranja", "morango"); array_push($cesta, "melancia", "batata"); print_r($cesta); ?>
array_reverse -- Retorna um array com os elementos na ordem inversa
array array_reverse ( array array [, bool preserve_keys] )
<?php $input = array("php", 4.0, array ("verde", "vermelho")); $result = array_reverse($input); $result_keyed = array_reverse($input, TRUE); print_r($result_keyed); ?>
array_search
-- Procura por um valor em um array e retorna sua chave correspondente caso seja encontrado. Caso contrário retorna FALSE.
mixed array_search ( mixed procurar_este, array procurar_neste [, bool strict] )
<?php $a=array("a","b",0,"c","d"); echo "a: ".array_search("a",$a)."<br>"; echo "b: ".array_search("b",$a)."<br>"; echo "c: ".array_search("c",$a)."<br>"; echo "d: ".array_search("d",$a)."<br>"; echo "0: ".array_search("0",$a)."<br>"; echo "x: ".array_search("x",$a)."<br>"; echo "1: ".array_search("1",$a); ?> <?php if (array_search($needle, $array)!== FALSE) { //code goes here ( } ?> <?php function array_replace($search, $replace, &$array) { foreach($array as $key => $value) { if($value == $search) { $array[$key] = $replace; } } } ?> <? $Projects[0] = array(123, "Text 1"); $Projects[1] = array(456, "Text 2"); $Projects[2] = array(789, "Text 3"); $search_value = "ext 3"; foreach ($Projects as $key => $row){ foreach($row as $cell){ if (strpos($cell, $search_value) !== FALSE){ echo "<p>Project ".$key; } } } ?>
array_shift -- Retira o primeiro elemento de um array
mixed array_shift ( array array )
<?php $cesta = array("laranja", "banana", "melancia", "morango"); $fruta = array_shift($cesta); print_r($cesta); ?>
array_sum -- Calcula a soma dos elementos de um array
mixed array_sum ( array arr )
<?php $a = array(2, 4, 6, 8); echo "soma(a) = ".array_sum($a)."<br>"; $b = array("a" => 1.2, "b" => 2.3, "c" => 3.4); echo "soma(b) = ".array_sum($b)."<br>"; ?>
array_unique -- Remove os valores duplicados de um array
array array_unique ( array array )
<?php $input = array("a" => "verde", "vermelho", "b" => "verde", "azul", "vermelho"); $result = array_unique($input); print_r($result); ?>
Exemplo 2. array_unique() e tipos
<?php $input = array(4, "4", "3", 4, 3, "3"); $result = array_unique($input); var_dump($result); ?> <pre> <h2>array_values -- Retorna todos os valores de um array</h2> array array_values ( array input ) //Retorna os valores, as chaves não <pre> <?php $array = array("tamanho" => "G", "cor" => "dourado"); print_r(array_values ($array)); ?>
array -- Cria um array
array array ( [mixed ...] )
Exemplo 1. Exemplo de array()
<?php $frutas = array ( "frutas" => array("a"=>"laranja", "b"=>"banana", "c"=>"maçã"), "numeros" => array(1, 2, 3, 4, 5, 6), "buracos" => array("primeiro", 5 => "segundo", "terceiro") ) ?>
Exemplo 2. Indexação automática com array()
<?php $array = array(1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13); print_r($array); ?>
arsort
-- Ordena um array em ordem descrescente dos valores mantendo a associação entre índices e valores
void arsort ( array array [, int sort_flags] )
<?php $frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia"); arsort($frutas); foreach ($frutas as $chave => $valor) { echo "$chave = $valor\n"; } ?>
asort
-- Ordena um array em ordem crescente dos valores mantendo a associação entre índices e valores
void asort ( array array [, int sort_flags] )
<?php $frutas = array("d" => "limao", "a" => "laranja", "b" => "banana", "c" => "melancia"); asort($frutas); foreach ($frutas as $chave => $valor) { echo "$chave = $valor\n"; } ?>
count -- Conta o número de elementos de uma variável
int count ( mixed var [, int mode] )
<?php $a[0] = 1; $a[1] = 3; $a[2] = 5; $a[3] = 6; $result = count($a); // $result == 4 print $result."<br>"; $b[0] = 7; $b[5] = 9; $b[10] = 11; $result = count($b); // $result == 3; print $result; ?>
Exemplo 2. Uso recursivo da função count() (PHP >= 4.2.0)
<?php $food = array( 'fruits' => array('orange', 'banana', 'apple'), 'veggie' => array('carrot', 'collard','pea')); // recursive count echo count($food,COUNT_RECURSIVE); // mostra 8 // normal count echo count($food); // mostra2 2 ?> <?php $food = array( 'fruits' => array('orange', 'banana', 'apple'), 'veggie' => array('carrot', 'collard','pea')); // recursive count echo count($food,COUNT_RECURSIVE)."<br>"; // mostra 8 // normal count echo count($food); // mostra2 2 ?>
current -- Retorna o elemento corrente em um array
mixed current ( array array )
<?php $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; echo "Atual $mode<br>"; $mode = next($transport); // $mode = 'bike'; echo "Atual $mode<br>"; $mode = current($transport); // $mode = 'bike'; echo "Atual $mode<br>"; $mode = prev($transport); // $mode = 'foot'; echo "Atual $mode<br>"; $mode = end($transport); // $mode = 'plane'; echo "Atual $mode<br>"; $mode = current($transport); // $mode = 'plane'; echo "Atual $mode<br>"; ?>
each -- Retorna o par chave/valor corrente de um array e avança o seu cursor
array each ( array array )
<?php $foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese"); $bar = each($foo); print_r($bar); ?> <?php $foo = array("Robert" => "Bob", "Seppo" => "Sepi"); $bar = each($foo); print_r($bar); ?>
Percorrendo um array com each()
<?php $fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry'); reset($fruit); while (list($key, $val) = each($fruit)) { echo "$key => $val\n"; } /* Saída: a => apple b => banana c => cranberry */ ?>
end -- Faz o ponteiro interno de um array apontar para o seu último elemento
mixed end ( array array )
<?php $frutas = array('melancia', 'banana', 'morango'); print end($frutas); // morango ?>
key -- Retorna uma chave da posição atual de um array associativo
mixed key ( array array )
<?php $array = array( 'fruit1' => 'apple', 'fruit2' => 'orange', 'fruit3' => 'grape', 'fruit4' => 'apple', 'fruit5' => 'apple'); // este ciclo exibirá todas as chaves do array associativo // auxiliado pela função next() while ($fruit_name = current($array)) { echo key($array).'<br>'; next($array); } ?> <?php $array = array( 'fruit1' => 'apple', 'fruit2' => 'orange', 'fruit3' => 'grape', 'fruit4' => 'apple', 'fruit5' => 'apple'); // este ciclo exibirá toda a chave do array associativo // onde o valor é igual a "apple" while ($fruit_name = current($array)) { if ($fruit_name == 'apple') { echo key($array).'<br>'; } next($array); } ?>
next -- Avança o ponteiro interno de um array
mixed next ( array array )
<?php $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; print"$mode<br>"; $mode = next($transport); // $mode = 'bike'; print"$mode<br>"; $mode = next($transport); // $mode = 'car'; print"$mode<br>"; $mode = prev($transport); // $mode = 'bike'; print"$mode<br>"; $mode = end($transport); // $mode = 'plane'; print"$mode<br>"; ?>
prev -- Retrocede o ponteiro interno de um array
mixed prev ( array array )
<?php $transport = array('foot', 'bike', 'car', 'plane'); $mode = current($transport); // $mode = 'foot'; print"$mode<br>"; $mode = next($transport); // $mode = 'bike'; print"$mode<br>"; $mode = next($transport); // $mode = 'car'; print"$mode<br>"; $mode = prev($transport); // $mode = 'bike'; print"$mode<br>"; $mode = end($transport); // $mode = 'plane'; print"$mode<br>"; ?> <pre> <h2>reset -- Faz o ponteiro interno de um array apontar para o seu primeiro elemento</h2> mixed reset ( array array ) <pre> <?php $array = array('primero passo', 'segundo passo', 'terceiro passo', 'quarto passo'); // por definição, o ponteiro está sobre o primeiro elemento echo current($array)."<br>\n"; // "Primeiro passo" // pula dois passos next($array); next($array); echo current($array)."<br>\n"; // "passo três" // reinicia o ponteiro, começa novamente o primeiro passo reset($array); echo "Depois de resetado...: " . current($array)."<br>\n"; // "primeiro passo" ?>
sizeof -- Apelido de count()
sort -- Ordena um array pelo seu valor
void sort ( array array [, int sort_flags] )
<?php $frutas = array("limao", "laranja", "banana", "melancia"); sort($frutas); foreach ($frutas as $chave => $valor) { echo "frutas[".$chave."] = ".$valor."<br>"; } ?>
Os seguintes também são funcionalmente idênticos:
<?php $arr = array("one", "two", "three"); reset($arr); while (list($key, $value) = each ($arr)) { echo "Chave: $key; Valor: $value<br />\n"; } foreach ($arr as $key => $value) { echo "Chave: $key; Valor: $value<br />\n"; } ?>
Mais alguns exemplos para demonstrar os usos:
<?php /* exemplo foreach 1: somente valores */ $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Valor atual de \$a: $v.\n"; } /* exemplo foreach 2: valores (com as chaves impressas para ilustração) */ $a = array(1, 2, 3, 17); $i = 0; /* para exemplo somente */ foreach ($a as $v) { echo "\$a[$i] => $v.\n"; $i++; } /* exemplo foreach 3: chaves e valores */ $a = array ( "um" => 1, "dois" => 2, "três" => 3, "dezessete" => 17 ); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; } /* exemplo foreach 4: arrays multidimensionais */ $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n"; } } /* exemplo foreach 5: arrays dinâmicos */ foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; } ?>
Exemplo de array multidimensional
$produto[1][codigo] = "1"; $produto[1][nome] = "João Pereira Brito"; $produto[1][email] = "joao@joao.org"; $produto[1][rua] = "Vasco da Gama"; $produto[1][numero] = "1345"; $produto[2][codigo] = "2"; $produto[2][nome] = "Antônio queiroz";
Exemplo de Array
$i=0; while($i < $numregs){ $codigo=pg_result($consulta,$i,codigo); $nome=pg_result($consulta,$i,nome); $venc=pg_result($consulta,$i,vencimento); $apartamento=pg_result($consulta,$i,apartamento); $pessoas=pg_result($consulta,$i,pessoas); $cota_agua=pg_result($consulta,$i,cota_agua); $cota_condominio=pg_result($consulta,$i,cota_condominio); $cota_reserva=pg_result($consulta,$i,cota_reserva); $total = $cota_agua + $cota_condominio + $cota_reserva; $total = number_format($total,2, ',','.'); ... $i++; }
Também podemos ter um array formado por outros arrays (neste caso, cada sub array é uma linha do principal)
$arrayvarios = array( array(1, 3, 5, 7), array(2, 4, 6, 8), array(1, 1, 1, 1) );
Neste caso temos um array 2x4 (2 linhas por 4 colunas, que iniciam sempre com índice zero).
Então se queremos retornar o valor 8, que está na linha 2 e coluna 4, devemos retornar o índice 1,3 (linha2=índice 1, coluna4=índice3).
print $arrayvarios[1][3];
Agora veremos com detalhes os pares: chave => valor:
$alunos = array( "0732355" => "Ribamar FS", "0823456" => "Antônio Brito", "0654345" => "Roberto Queiroz" );
O que isto retornaria?
print $alunos["0732355"]; print $alunos[0];
Experimente!!
Atribuindo valores às chaves de arrays
Também podemos fazer diretamente assim:
print $alunos["0732355"] = "João Brito";
Lembrando que, a chave, é exclusiva. Podemos ter
$alunos["0732355"] = "João Brito"; $alunos["0932355"] = "João Brito"; Mas não podemos ter: $alunos["0732355"] = "João Brito"; $alunos["0732355"] = "Ribamar FS";
Anexo agora um excelente tutorial sobre Arrays do Celso Goya publicado em: http://www.xoopstotal.com.br/modules/wfsection/article.php?articleid=51
Trabalhando com arrays
Visão geral Para facilitar o entendimento, vamos definir array como um conjunto de valores, que podem ser identificados em grupo ou então separadamente. Estes conjuntos podem ser muito úteis enquanto programamos, pois em alguns casos podem substituir uma tabela em banco de dados ou então utilizando métodos mais avançados podemos carregá-los dinâmicamente e utilizar quase como um banco de dados em memória.
A linguagem PHP oferece uma incrível gama de recursos para se trabalhar com arrays. Com destaque para as funções auxiliares que permitem fazer desde uma simples contagem de elementos até a conversão automática de um array em string.
Neste artigo desenvolveremos como exemplo uma função para gerar combo boxes com os estados do Brasil. Muitas vezes criamos uma tabela no banco de dados para armazenar a lista de estados do Brasil sendo que neste caso existe um número finito de registros e menor que 100, então as operações de banco de dados não são tão ágeis quanto o uso de um array.
Criando o primeiro array
Para utilizar um array, antes de mais nada é preciso criar uma variável do tipo array.
<?php $estados = array(); ?>
O próximo passo é montar nossa lista de estados.
<?php $estados = array(); $estados[0] = "Acre"; $estados[1] = "Alagoas"; $estados[2] = "Amapá"; $estados[3] = "Amazonas"; ?>
Os colchetes servem para identificar qual elemento do nosso conjunto estamos nos referindo e o número entre colchetes é o código identificador do elemento.
Podemos fazer o seguinte teste:
<?php $estados = array(); $estados[0] = "Acre"; $estados[1] = "Alagoas"; $estados[2] = "Amapá"; $estados[3] = "Amazonas"; echo($estados[0]); ?>
Neste caso será exibida a palavra Acre, pois indicamos o ítem [0] da variável $estados, que é um array.
Você deve estar se perguntando "O que há de tão fantástico em um array?". Agora vamos mostrar alguns recursos.
Criando o array de estados
Nosso array não será de grande valia se não permitir que as siglas dos estados sejam armazenadas também, pois desta forma podemos guardar no banco de dados apenas os dois caractéres correspondentes à sigla do estado, ou seja, utilizaremos apenas dois bytes no banco de dados.
Então vamos criar um array com duas colunas, sendo a primeira a sigla do estado e a segunda seu nome por extenso.
<?php $estados = array(); $estado[0][0] = "AC"; $estado[0][1] = "Acre"; $estado[1][0] = "AL"; $estado[1][1] = "Alagoas"; $estado[2][0] = "AP"; $estado[2][1] = "Amapá"; $estado[3][0] = "AM"; $estado[3][1] = "Amazonas"; $estado[4][0] = "BA"; $estado[4][1] = "Bahia"; $estado[5][0] = "CE"; $estado[5][1] = "Ceará"; $estado[6][0] = "DF"; $estado[6][1] = "Distrito Federal"; $estado[7][0] = "ES"; $estado[7][1] = "Espírito Santo"; $estado[8][0] = "GO"; $estado[8][1] = "Goiás"; $estado[9][0] = "MA"; $estado[9][1] = "Maranhão"; $estado[10][0] = "MG"; $estado[10][1] = "Minas Gerais"; $estado[11][0] = "MT"; $estado[11][1] = "Mato Grosso"; $estado[12][0] = "MS"; $estado[12][1] = "Mato Grosso do Sul"; $estado[13][0] = "PA"; $estado[13][1] = "Pará"; $estado[14][0] = "PB"; $estado[14][1] = "Paraíba"; $estado[15][0] = "PR"; $estado[15][1] = "Paraná"; $estado[16][0] = "PE"; $estado[16][1] = "Pernambuco"; $estado[17][0] = "PI"; $estado[17][1] = "Piauí"; $estado[18][0] = "RJ"; $estado[18][1] = "Rio de Janeiro"; $estado[19][0] = "RN"; $estado[19][1] = "Rio Grande do Norte"; $estado[20][0] = "RS"; $estado[20][1] = "Rio Grande do Sul"; $estado[21][0] = "RO"; $estado[21][1] = "Rondônia"; $estado[22][0] = "RR"; $estado[22][1] = "Roraima"; $estado[23][0] = "SC"; $estado[23][1] = "Santa Catarina"; $estado[24][0] = "SP"; $estado[24][1] = "São Paulo"; $estado[25][0] = "SE"; $estado[25][1] = "Sergipe"; $estado[26][0] = "TO"; $estado[26][1] = "Tocantins"; ?>
A diferença neste exemplo é que utilizamos dois identificadores de elemento, ou seja, agora para cada elemento do array possuimos mais outros dois dependentes. Da mesma forma que criamos dois elementos o 0 e 1 para cada item de estado poderiamos criar n novos sub-elementos, por exemplo:
<?php $estado = array(); $estado[0][0] = "SP"; $estado[0][1] = "São Paulo"; $estado[0][2] = "Sudeste"; ?>
Vamos considerar à partir de agora que um array possui linhas e colunas, onde as linhas são equivalentes ao primeiro conjunto de colchetes e as colunas são equivalentes ao segundo conjunto de colchetes.
A função de exibição do combo box de estados
Agora vamos exibir todos os elementos de nosso array em uma função:
<?php /*Nossa função reebe 3 parâmetros $pNome :: Corresponde ao nome do SELECT $pSelected :: Corresponde ao elemento que deverá possuir o status de selecionado automaticamente $extra :: Caso precise adicionar um style, ou então opção de multiple */ function renderCombo($pNome = "", $pSelected = "SP", $extra = ""){ echo("<SELECT NAME='".$pNome."' ".$extra.">"); /* Para exibir todos os itens do nosso combo utilizamos o comando for , lembre-se que como usamos números para identificar nosso array, então podemos substituí-lo automaticamente com o for */ //Realiza o loop em todos os elementos do array for( $i = 0; $i < 26;$i++ ){ //Imprime a TAG OPTION usando a primeira coluna do array echo("<OPTION VALUE='".$estado[$i][0]."'"); //Efetua a comparação para verificar se este é o ítem selecionado if( $estado[$i][0] == $pSelected ){ //Caso a comparação seja verdadeira seleciona o ítem echo(" SELECTED"); } //Imprime o nome por extenso do estado, equilavente a segunda coluna do array echo(">".$estado[$i][1]."</option>\n"); } //Finaliza a tag SELECT echo("</SELECT>\n"); } ?>
Eureka! Esta feita uma função para exibir um combo de estados.
Identificadores alternativos
Na linguagem PHP podemos utilizar palavras para identificar um elemento de um array, este recurso é muito bom, pois facilita muito a depuração e o entendimento de programas que utilizam arrays.
Vamos utilizar nosso array de estados como exemplo:
<?php $estado[0]["sigla"] = "SP"; $estado[0]["nome"] = "São Paulo"; $estado[0]["regiao"] = "Sudeste"; echo($estado[0]["sigla"]); ?>
Desta forma podemos deixar o código de nossos programas mais fáceis de se compreender. Repare que utilizamos uma string simples para identificar um elemento do array, sendo assim, podemos utilizar variáveis para identificar um item do array, por exemplo:
<?php $estado[0]["sigla"] = "SP"; $estado[0]["nome"] = "São Paulo"; $estado[0]["regiao"] = "Sudeste"; $variavel = "sigla"; echo($estado[0][$variavel]); ?>
É importante lembrar que mesmo existindo uma string para identificar um elemento do array ainda podemos utilizar números se quisermos, por exemplo:
<?php $estado[0]["sigla"] = "SP"; $estado[0]["nome"] = "São Paulo"; $estado[0]["regiao"] = "Sudeste"; echo($estado[0][0]); ?>
Nos três casos o resultado é o mesmo, diferindo apenas no método como chamamos o array.
O que você viu neste artigo é o básico sobre arrays, caso você se interessar pelo assunto e queira dar uma pesquisada rápida na web, vai encontrar outras formas de declarar arrays bem como usos diferenciados. O XOOPS utiliza muito este recurso. É só dar uma olhada em algum arquivo xoops_version.php, que você vai encontrar um exemplo prático do uso de arrays.
Final do tutorial do Celso Goya.