Posts tagged Array
Curso de PHP: Array (Matrizes) – Parte 2
0No post passado, sobre arrays unidimensionais, foi explicado os conceitos básicos sobre arrays. E até agora, vimos apenas com uma dimensão, para melhor ilustrar, podemos falar que vimos um array como uma lista ou fila única. Mas as matrizes são muito mais úteis.
Relembrando, para criar um array unidimensional podemos fazer:
<?php
$lista = array('Maria', 'Carlos', 'Edgar');
for ($i = 0; $i < 3; $i++) {
echo 'Posição: ' . $i . ' Nome: ' . $lista[$i] . '<br />';
}
?>
O código acima irá exibir uma listagem de nomes bem simples.
Imagine um cenário onde além do nome, gostaria de exibir a idade referente as pessoas. Já que os nomes estão armazenados em um array, não seria interessante armazenar a idade em um array também?
<?php
$lista = array('Maria', 'Carlos', 'Edgar');
$idade = array(50, 60, 23);
for ($i = 0; $i < 3; $i++) {
echo 'Posição: ' . $i . ' Nome: ' . $lista[$i] . ' Idade: ' . $idade[$i] .'<br />';
}
?>
Bom, ficou bem claro que as idades estão diretamente ligadas aos nomes. Porém ainda estamos utilizando dois arrays unidimensionais.
Uma forma de entender facilmente o que são arrays multimensonais é pensar como uma tabela, com linhas e colunas. Na primeira linha de nosso array, teremos vários nomes, na segunda linha teremos várias idades referentes aos nomes, portanto podemos fazer assim:
<?php
/**
* Inicialização da variável $lista indicando que é um array, porém, unidimensional
*/
$lista = array();
/**
* Na primeira linha, vários nomes, o que exige guardar como um array
*/
$lista[] = array('Maria', 'Carlos', 'Edgar');
/**
* Na segunda linha, várias idades, o que exige guardar como um array
*/
$lista[] = array(50, 60, 23);
echo $lista[0][0]; //imprimindo a primeira linha e a primeira coluna
echo '<br />';
echo $lista[0][1]; //imprimindo a primeira linha e a segunda coluna
echo '<br />';
echo $lista[0][3]; //imprimindo a primeira linha e a terceira coluna
echo '<br />';
echo $lista[1][0]; //imprimindo a segunda linha e a primeira coluna
echo '<br />';
echo $lista[1][1]; //imprimindo a segunda linha e a segunda coluna
echo '<br />';
echo $lista[1][3]; //imprimindo a segunda linha e a terceira coluna
echo '<br />';
?>
Leia com atenção o código acima. Foi criado um array, e cada linha recebeu outro array. Isso pode ser pensado como uma tabela, pois só tem duas dimensões.
Não existe limite para as dimensões de um array, porém, a medida em que se aumente as dimensões de um array, fica mais difícil de representá-la graficamente.
Existem várias formas de se criar um array multidimensionais, dinamicamente, como feito anteriormente, ou seja, montando linha a linha, ou, na declaração da variável.
<?php
$lista = array( array('Maria', 'Carlos', 'Edgar'), array(50, 60, 23) );
echo $lista[0][0]; //imprimindo a primeira linha e a primeira coluna
echo '<br />';
echo $lista[0][1]; //imprimindo a primeira linha e a segunda coluna
echo '<br />';
echo $lista[0][3]; //imprimindo a primeira linha e a terceira coluna
echo '<br />';
echo $lista[1][0]; //imprimindo a segunda linha e a primeira coluna
echo '<br />';
echo $lista[1][1]; //imprimindo a segunda linha e a segunda coluna
echo '<br />';
echo $lista[1][3]; //imprimindo a segunda linha e a terceira coluna
echo '<br />';
?>
O resultado é o mesmo, um array de array. Porém, mais curto.
<?php
$cubo = array('Edgar' => array( 'ontem' => array(10, 11, 12),
'hoje' => array(15, 16, 17)),
'Carlos' => array( 'ontem' => array(21, 22, 55),
'hoje' => array(25, 35, 11)),
'José' => array( 'ontem' => array(99, 82, 75),
'hoje' => array(44, 15, 07)));
//imprimindo a segunda dezena do José de ontem.
echo $cubo['José']['ontem'][1];
//mudando a 3 dezena de hoje do Carlos
$cubo['Carlos']['hoje'][2] = 28;
?>
O código acima ilustra o cenário onde três pessoas (Edgar, Carlos e José) que em dois dias (ontem e hoje) escolheram 3 dezenas.
Perceba também que você pode usar strings como indicadores de posição nos arrays multidimensionais.
Curso de PHP: Array (Matrizes) – Parte 1
0Os arrays, também conhecidos como matrizes, são posições de memória sequencialmente armazenadas.
Acessados por um único identificador (nome do array) cada posição pode ser acessada por um indicador, numérico ou texto. Como dito, arrays são posições de memória, ou seja, uma variável de memória. Portanto um array nada mais é que um tipo de variável. O array sempre deve ser inicializado, e para fazer isso basta utilizar a função array.
<?php $meuArray = array(); ?>
O código acima indica ao PHP que a variável acima é um array. Vejamos pra que usar um array. Veja o seguinte código:
<?php $nota1 = 10; $nota2 = 5; $nota3 = 7; $nota4 = 7; $nota5 = 3; echo 'A nota 1 é' . $nota1 . '<br>'; echo 'A nota 2 é' . $nota2 . '<br>'; echo 'A nota 3 é' . $nota3 . '<br>'; echo 'A nota 4 é' . $nota4 . '<br>'; echo 'A nota 5 é' . $nota5 . '<br>'; ?>
O código acima armazena os valores de cinco notas eapresenta depois. Para fazer isso com array poderemos fazer da seguinte forma:
<?php $nota = array(); $nota[1] = 10; $nota[2] = 5; $nota[3] = 7; $nota[4] = 7; $nota[5] = 3; echo 'A nota 1 é' . $nota[1] . '<br>'; echo 'A nota 2 é' . $nota[2] . '<br>'; echo 'A nota 3 é' . $nota[3] . '<br>'; echo 'A nota 4 é' . $nota[4] . '<br>'; echo 'A nota 5 é' . $nota[5] . '<br>'; ?>
Se você testar o código acima verá que a execução será o mesmo do anterior, porém, agora temos uma única variáel $nota que possui 5 posições, ou seja, um array de 5 posições.
Quando fazemos $nota = array() criamos a variável com 5 posições. Depois preenchemos cada posição com um número entre colchetes logo após o nome da variável. Esse número é o índice do array. O índice identifica a posição do array que está o valor que nós queremos acessar. Para acessar o valor basta informar o nome da variável seguido de colchetes e com o índice desejado dentro dos colchetes.
Qual a vantagem de usar um array ao invés de variáveis separadas? Veja que no primeiro código precisamos de 5 instruções echo para mostrar todas as notas. No segundo, também utilizamos 5 instruções, porém, o ideal é diminuir essas instruções. Veja como:
<?php
$nota = array();
$nota[1] = 10;
$nota[2] = 5;
$nota[3] = 7;
$nota[4] = 7;
$nota[5] = 3;
for ( $indice = 1 ; $indice <= 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
Notou a diferença? Utilizamos um for para iniciar o nosso $indice com 1 e somar com 1 a cada volta do laço enquanto o $indice <= 5. Também colocamos o $indice entre colchetes. Isso diz ao PHP que o índice da variável $notas será indicada na variável $indice. Portanto, para você enteder, na primeira volta a variável $indice vale 1, imprimindo o indice 1 da $nota ($nota[1]). Na segunda volta a $variavel $indice valerá 2, que seria o mesmo que $nota[2], e assim por diante. Dessa forma foi possível economizar várias linhas não é mesmo?
Índice string
O índice de um array pode ser uma string também. Veja:
<?php $pessoa = array(); $pessoa['nome'] = 'Edgar Ferreira da Silva' ; $pessoa['idade'] = 23; $pessoa['sexo'] = 'masculino'; echo 'Meu nome é ' . $pessoa['nome'] . '. Sou do sexo ' . $pessoa['sexo'] . ' e tenho ' . $pessoa['idade'] . ' anos.'; ?>
O código acima é uma array normal, a única diferença é que seu índice é formado por strings. A única regra é que o índice seja uma string ( que esteja dentro de aspas, simples ou dupla, ou que seja uma variável que contenha uma string ). Digo isso porque tem muitas pessoas que utilizam os indices como string, mas sem utilizar aspas. Funcionar até funciona, mas apenas em alguns casos. Portanto, sempre utilize aspas.
Inicializando
Outra forma de guardar os valores no array é passando o conteúdo na inicialização. Veja:
<?php
$nota = array( 10, 5, 7, 7, 3 );
for ( $indice = 0 ; $indice < 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
O código acima apresenta um resultado parecido como os primeiros códigos apresentados no começo. O que mudou?
A primeira grande mudança é que ele ficou mais enxuto no armazenamento dos valores na variável, pois, estamos passando os valores na criação da variável com a função array().
Outra mudança que percebemos é que a nota não começa mais do 1 e sim do 0. O que ocasionou uma mudança na inicialização e no teste do for também. Porquê?
Quando armazenamos um valor em um array e não informamos o índice, o PHP pega o maior valor inteiro já utilizado no índice do array e soma 1. Como estamos inicializando nosso array, o primeiro índice será 0. Par o próximo valor que for adicionado no array será adicionado 1 ao índice.
Para iniciar o array com o índice 1 e mesmo assim escrever um código enxuto basta informar o índice na criação do array. Veja:
<?php
$nota = array( 1 => 10, 2 => 5, 3 => 7, 4 => 7, 5 => 3 );
for ( $indice = 1 ; $indice <= 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
A chave, ou índice de cada valor pode ser indicado na criação do array seguindo a seguinte regra: indice => valor.
Lembra que eu disse que quando adicionamos um valor ao array e não informamos o índice o PHP encontra o maior número inteiro e soma 1? Então o código acima pode ser reescrito da seguinte forma:
<?php
$nota = array( 1 => 10, 5, 7, 7, 3 );
for ( $indice = 1 ; $indice <= 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
Informando o índice inteiro no primeiro valor, os próximos serão preenchidos automaticamente somando 1.
O índice do tipo string também pode ser informado na inicialização da variável:
<?php
$pessoa = array('nome' => 'Edgar Ferreira da Silva', 'idade' => 23, 'sexo' => 'masculino');
echo 'Meu nome é ' . $pessoa['nome'] . '. Sou do sexo ' . $pessoa['sexo'] . ' e tenho ' . $pessoa['idade'] . ' anos.';
?>
Outra forma que o PHP aceita de criação e alimentação de arrays é omitindo o índice. Veja:
<?php
$nota = array();
$nota[] = 10;
$nota[] = 5;
$nota[] = 7;
$nota[] = 7;
$nota[] = 3;
for ( $indice = 0 ; $indice < 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
Veja que o índice não foi passado na atribuição dos valores. Isso diz ao PHP para ele gerenciar o índice. Portanto ele no primeiro valor atribui o índice 0, e nos demais vai somando 1. Para começar do 1 basta fazer o seguinte:
<?php
$nota = array();
$nota[1] = 10;
$nota[] = 5;
$nota[] = 7;
$nota[] = 7;
$nota[] = 3;
for ( $indice = 1 ; $indice <= 5 ; $indice++ ) {
echo 'A nota ' . $indice . ' é' . $nota[$indice] . '<br>';
}
?>
Informando o primeiro índice, os próximos serão somados 1.




Comentários