Aplicativos em PHP/Trabalhando em PHP com/Arrays

Origem: Wikilivros, livros abertos por um mundo aberto.
Ir para: navegação, pesquisa

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.


Convertendo objetos para um array

http://www.revistaphp.com.br/print.php?id=147