Alura > Cursos de Programação > Cursos de PHP > Conteúdos de PHP > Primeiras aulas do curso PHP: manipulando coleções com Arrays

PHP: manipulando coleções com Arrays

Recapitulando - Apresentação

Sejam muito bem-vindos a Alura, eu sou o Vinícius Dias e vou guiar vocês nesse treinamento onde vamos conhecer a principal estrutura de dados do PHP. Eu digo que ela é a principal porque ela é muito utilizada, inclusive em casos onde talvez ela não deveria, mas é fato de que os arrays em PHP são muito poderosos.

Existe uma frase muito interessante que diz que os arrays em PHP são otimizados para tudo e para nada ao mesmo tempo. Justamente pela versatilidade, os arrays em PHP são bastante versáteis e genéricos, isso quer dizer você pode tratar um array do PHP como lista, como fila, como pilha, como várias estruturas de dados, como mapa.

Não precisa se atentar a esse detalhe sobre estrutura de dados agora, mas é importante saber que o array é realmente muito utilizado no mundo PHP, por isso ele merece um curso específico sobre ele.

Nesse treinamento vamos revisitar um pouco sobre o que é um array, inclusive com alguns detalhes mais de baixo nível, por baixo dos panos do PHP. A partir daí vamos começar a brincar aprendendo funcionalidades e funções novas, vamos falar bastante sobre ordenações de arrays, verificações que podemos fazer, encontrar elementos dentro de um array, verificar se algo existe lá dentro, inclusive verificações diferentes.

A partir daí começamos a manipular, brincar com nosso array, calcular diferença entre um array e outro, pegar só as chaves ou só os valores de um array, modificar, combinar arrays. Depois vamos entrar mais a fundo em manipulações adicionando e removendo arrays, pegando no início e pegando no final algum elemento. Vamos conhecer funções com algumas particularidades, com funcionalidades meio peculiares.

E lá no final eu vou bater um papo sobre as três principais funções que não são mostradas nesse treinamento. Só que elas não são mostradas por dois motivos: uma, já tem um treinamento específico que fala sobre elas, lá no final vamos bater papo e também eu vou deixar um artigo porque já temos um artigo bem detalhado falando sobre essas funções. Que são: a de array map, filter e reduce.

Elas são ensinadas em outro treinamento e também possuem um artigo, ou seja, elas receberam bastante atenção. Nesse treinamento vamos ver muita coisa além dessas três funções mais famosas.

Espero que você gosta bastante e como tem bastante conteúdo, se em algum momento algo não ficar muito claro não hesite, você pode abrir uma dúvida lá no nosso fórum.

Eu tento responder pessoalmente sempre que possível, mas quando eu não consigo por serem muitas dúvidas, temos uma vasta comunidade de alunos, moderadores e instrutores e com certeza alguém vai conseguir te ajudar. Inclusive, também faço o convite para você responder dúvidas no fórum, é uma ótima fonte de aprendizado.

Agora chega de falar sobre o que vamos aprender e vamos efetivamente aprender. Te espero no próximo vídeo para recapitularmos um pouco de conhecimento e botar um pouco de mão na massa.

Recapitulando - Estrutura de um array

Bem-vindos de volta. Antes de conhecermos qualquer funcionalidade nova, vamos recapitular um pouquinho e entender algumas nuances do PHP.

Primeiro, para definirmos um array utilizamos ou a sintaxe de colchetes ou a palavra array, é mais comum hoje em dia vermos utilizando essa sintaxe de colchetes. E aqui dentro podemos ter ou simplesmente valores, por exemplo, 1, 2, 3, 4 e ter todos os valores que queremos armazenar nesse vetor, nesse array ou podemos indicar uma chave e um valor.

Podemos, por exemplo, ter um mapeamento de um numeral, um valor inteiro para o seu nome em português, 2 => "dois", podemos ter aqui esse mapa. Dessa forma conseguimos brincar criando arrays.

Um outro detalhe importante é que essa chave aqui dos arrays precisa ser ou inteiro ou uma string. Se eu colocar, por exemplo, aqui a chave 1 e aqui um valor booleano true => ‘dois’, esse true vai ser convertido para 1 e o valor que vamos ter vai ser somente esse 2.

Inclusive, deixa eu exibir isso para você ver var_dump(&array);. Aqui nesse momento eu vou executar um pouco diferente do que temos feito utilizando o terminal. No seu caso ou caso você não utilize uma IDE ou algo do tipo, você vai abrir o seu terminal normal e digitar lá: php e o nome desse arquivo que aqui é arrays.php.

No meu caso eu vou executar direto da IDE, só para termos um pouquinho mais de praticidade aqui. Repare que com esse array que eu criei eu tenho apenas um valor, o valor 2. Repare que quando utilizamos chaves, quando temos um array associativo que é como chamamos quando nós definimos a chave manualmente, sempre precisamos utilizar ou inteiro ou string, qualquer coisa diferente disso vai ser convertido.

Por exemplo, se eu colocar aqui dessa forma 1.3 => ‘tres’, eu vou ter somente o valor, porque esse número também vai ser convertido para 1, é como se eu tivesse definindo aqui a chave 1 com valor 1, eu redefino a chave 1 com valor 2, depois eu redefino a chave 1 com o valor 3. Quando eu executo eu tenho lá de novo somente o valor 3.

"Vinicius, como funciona essa conversão? Por que que true virou 1, por que 1.3 virou 1?" Eu vou deixar um Para Saber Mais com todas as conversões de tipo do PHP, mas basicamente, um valor booleano quando é convertido para inteiro se for true ele vai ser convertido para 1, se for false ele vai ser convertido para 0.

Já um valor de ponto flutuante, um número decimal se for convertido para inteiro ele vai simplesmente ignorar o ponto flutuante, ele vai pegar essa primeira parte. Repare que mesmo que eu coloque 1.9, que é mais próximo de 2, ele ainda assim vai converter isso aqui para 1. Quando eu executei, como eu deixei o false, o 2 agora foi convertido para 0. Repare que é exatamente aquilo que eu citei.

Deixa eu voltar para aquele true e ter um único valor que agora é um com 1 com o 3. Essa é a lógica por trás de um array associativo, precisamos ter inteiros ou strings como suas chaves. É um ponto importante de entender e aí acabamos entrando um pouco mais por baixo dos panos do PHP. Inclusive, se alguma coisa do que eu falar daqui para frente não ficar muito claro, não se preocupa que isso começa a se tornar um pouco mais avançado.

Basicamente, em várias outras linguagens quando trabalhamos com essa estrutura de dados chamada array ou quando traduzimos para o português um vetor, o que temos normalmente é: um espaço é alocado na memória, deixa eu desenhar aqui alguma coisa. Imagina que isso aqui é a minha memória RAM e eu queira criar um array com 3 elementos.

Esse espaço aqui já está ocupado, esse espaço aqui está ocupado e esse aqui está ocupado e o restante todo está livre. O que o computador vai fazer? Se eu precisar de um array com três elementos ele vai procurar aqui na minha memória três espaços consecutivos. Eu quero um array com três elementos, aqui cabem três elementos, eu vou reservar esse espaço de memória aqui para o meu array.

Vai ser uma memória contínua e dessa memória continua eu vou poder utilizar meu array. E se eu quiser crescer esse array, eu vou precisar copiar estes valores daqui e levar para um outro lugar da memória que tenha mais espaço. Normalmente em várias outras linguagens é assim que funciona um array.

Em PHP isso é diferente, em PHP a estrutura de dados não é feita dessa forma contínua o que temos, super simplificando, é basicamente um mapa lá na nossa memória. Ele vai ter um monte de listas e aí, por exemplo, em uma estrutura mais complexa ele vai dizer: "opa, eu tenho aqui um valor que é o número 1 e esse valor aponta para um outro lugar na memória que vai ter esse valor 1." É isso que estamos dizendo aqui.

Essa estrutura de baixo por baixo dos panos se chama HashMap ou mapa, ou tabela de espalhamento, existem vários nomes para isso, mas basicamente é um HashMap. Inclusive, eu vou deixar também um Para Saber Mais de um podcast do Hipster Ponto Tech que tem falando especificamente sobre essas estruturas de dados, para você ver como ela é relativamente complexa.

Basicamente o meu ponto aqui é: se em algum momento você for ter uma conversa de mais baixo nível sobre vetores e arrays em PHP isso é um pouco diferente, não temos o espaço de memória contínuo, temos na verdade um mapa. Por isso é possível termos aqui valores associativos. No nosso caso arrays associativos.

Quando eu não tenho arrays associativos por baixo dos panos, como já vimos no treinamento anterior, ele só faz isso automaticamente para nós, ele começa com 0 e vai incrementando. Sempre temos arrays associativos só que de forma automática por padrão. Caso definimos de forma manual podemos escolher as chaves.

Para recapitular: nós temos arrays normais, vamos ver assim, arrays numéricos e arrays associativos, onde podemos definir as chaves e essas chaves precisam ser ou um número inteiro que definimos ou uma string qualquer. Não pode ser float, não pode ser booleano, outro array, por exemplo, precisam ser ou inteiro ou uma string.

A partir disso entendemos que por baixo dos panos o array do PHP utiliza uma outra estrutura de dados que podemos nos aprofundar mais para frente, mas basicamente é isso. Agora vamos recapitular um pouquinho das funções que já vimos sobre array e entender um pouco melhor o que elas fazem e como elas fazem no próximo vídeo.

Recapitulando - Funcionalidades já conhecidas

Bem-vindos de volta. Vamos recapitular bem rápido as funções mais simples, na verdade as funcionalidades mais simples que já conhecemos sobre arrays.

Se temos aqui um array seja ele numérico ou associativo nós com certeza conseguimos percorrer esse array. Sabemos percorrer utilizando o for e o foreach, vamos só recapitular como faríamos com o foreach. Vou remover esse var_dump aqui e fazer um foreach.

Eu tenho foreach, cada item do meu array, ou seja, a minha variável que tenha esse vetor como e aí eu vou dar um nome para cada um dos elementos, o nome para uma variável que vai receber cada um dos elementos do meu array, vai ser o nome do número, foreach ($array as $nomeNumero). Eu posso exibir esse nome do número e adicionar uma quebra de linha no final, echo $nomeNumero . PHP_EOL;.

Com isso se eu clico aqui para executar eu tenho a exibição: um, dois e três. Agora se eu quiser manipular não só os valores, mas também as chaves, ou seja, os índices do meu array, seja ele associativo ou numérico, eu posso utilizar essa sintaxe. Eu vou colocar aqui a chave, o sinal de seta com igual, o mesmo operador que utilizamos para definir e o nome da variável que queremos no valor foreach (&array as &numeral => $nomeNumero).

Para não chamar de chave eu vou chamar de numeral e aqui o nome do número. Vou escrever numeral em português é esse número o nome do número, echo "$numeral em português é: $nomeNumero . PHP_EOL;.

Salvei e agora eu espero que seja exibido. Zero em português é um, isso obviamente estar errado, mas vamos executar só para vermos se vai exibir corretamente. 0 em português é: um. Agora eu posso alterar os meus índices para essa mensagem fazer sentido. Vou executar e agora eu tenho o resultado esperado.

Agora vamos continuar com uma outra função muito simples. Imagina que eu queira saber o número de elementos nesse array, eu poderia percorrer todo esse array e incrementar um contador, por exemplo, eu tenho um contador que começa com zero e eu posso incrementar esse contador a cada iteração desse array.

Uma iteração é uma vez em que eu passo por um elemento desse array. Eu poderia fazer isso e aí no final eu exibo: echo "Total: $contador” . PHP_EOL;, adiciono uma quebra de linha, executo e no final tem lá: Total: 3.

Isso traz o resultado esperado só que como já conhecemos tem uma forma mais simples de fazermos isso, que ao invés de precisar percorrer todo esse array que poderia levar bastante tempo, eu posso simplesmente utilizar uma função. Eu tenho duas funções que na verdade são sinônimas, uma é um apelido para outra, que são a count desse array, vamos executar só para garantir que o resultado é o esperado echo "Total: " . count($array) ´PHP_EOL;, clico para executar e o resultado é o esperado.

E temos também sizeof. Essa sizeof hoje em dia é bem menos utilizada, vemos mais o count, mas essas duas funções são basicamente sinônimos, uma é um apelido para a outra, as duas chamam a mesma função por baixo dos panos.

"Vinicius, tem alguma diferença na prática além de como escrevemos o código em questão de performance?" Tem sim. Lembra que eu falei que essa estrutura de dados aqui não é simplesmente um array, essa estrutura de dados por baixo dos panos armazena a quantidade, quantos itens esse array aqui já tem.

Basicamente quando eu chamo esse count ou o sizeof eu não vou precisar percorrer todos os arrays, o PHP já sabe o tamanho de elementos que está ali dentro desse vetor, desse array, desse mapa e exibe para nós.

Por isso, caso você queira pegar o tamanho de um array, não percorra ele todo, utilize uma dessas duas funções que por padrão hoje em dia utilizamos count, mas o sizeof vai ter o mesmo resultado.

Essas são as funcionalidades que já conhecíamos do array em PHP. Aqui nos aprofundamos um pouco mais e entendemos um pouco mais a fundo como elas funcionam até por baixo dos panos, mas basicamente isso tudo já conhecíamos.

Agora vamos começar a entender um pouco melhor como podemos manipular um array, como podemos talvez modificar, ordenar os valores que estão lá, enfim, vamos brincar um pouquinho com os arrays. Só que isso começamos a fazer a partir do próximo capítulo.

Sobre o curso PHP: manipulando coleções com Arrays

O curso PHP: manipulando coleções com Arrays possui 118 minutos de vídeos, em um total de 48 atividades. Gostou? Conheça nossos outros cursos de PHP em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda PHP acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas