Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método 'map()'

Boa noite

Não consegui entender muito bem o funcionamento do método map(). Poderia me explicar?

Trecho do código abaixo da aula:

foreach ($alunoList as $aluno) {
    $telefones = $aluno->getTelefones()
        ->map(function (Telefone $telefone) {
            return $telefone->getNumero();
        })
        ->toArray();
    echo "ID: {$aluno->getId()}\nNome: {$aluno->getNome()}\nTelefones: " . implode(', ', $telefones);
    echo "\n\n";
}
3 respostas
solução!

Olá Leonardo,

O método map é um método bastante conhecido em diversas linguagens de programação onde seu objetivo é mapear os elementos de um array ou coleção de dados.

O $aluno->getTelefones() me retornaria todos objetos guardados, porém eu quero transformar/mapear esses objetos para obter somente os números e como transformamos coisas na programação? Através de funções.

Então, o map recebe um callback (função) como parâmetro, que no nosso caso é o function(Telefone $telefone) return $telefone->getNumero(); e irá aplicar essa função a cada elemento de nossa coleção, ou seja, se eu tiver quatro elementos na minha coleção, por exemplo, o map pegará o primeiro elemento dessa coleção e irá aplicar essa função retornando somente o número do telefone, depois fará o mesmo procedimento com o segundo elemento e assim sucessivamente.

Seria a mesma coisa coisa de fazer:

foreach($aluno->getTelefones() as $telefone) {

$telefones[] = $telefone->getTelefone(); }

return $telefones;

Mas pense: Realizar transformações em elementos de um array é uma tarefa tão corriqueira por que não abstrair isso de alguma forma? Por isso temos o map.

Esse é um map da própria collection do doctrine, mas no PHP temos essa função também. Sugiro que dê uma pesquisada sobre map, filter e reduce, são funções muitos importantes no dia a dia de desenvolvimento.

Pode ter ficado meio confuso, mas tentei explicar de maneira mais simples possível, sem utilizar muitos jargões, se não ficou muito claro só falar.

Eu não teria explicado melhor, Diego. Ótima explicação.

Pra complementar as sugestões de estudo que o Diego deixou, dá uma olhada nesse link, Leonardo:

https://www.alura.com.br/artigos/trabalhando-com-arrays-em-php

Abraços e bons estudos.

Obrigado!