3
respostas

nao entendi solucao oferecida no curso para busca de 2 elementos repetidos na lista de pedidos(array)

Boa noite gente, náo entendi a solucao abaixo oferecida no curso. Para buscar se tem 2 itens com o mesmo nome no pedido eu fiz a busca, mas o que nao entendo é a solucao proposta aqui no curso ( o qual adoraria, pois aqui fizeram com muito menos linhas d codigo) Sei usar in_array mas, o que enxergo abaixo é que esta buscando o valor de $item->getNome() quer dizer o nome do produto em um array vazio que foi declarado array () ...? reitero, abaixo nao é meu codigo, é a solucao proposta no curso e fiquei surpreso. Conforme apenas trata-se de uma condicao mais o eixo da coisa é o pattern ia deixar passar, sqn.

//Crie o imposto IHIT, que tem a seguinte regra: caso existam 2 ítens com o mesmo nome, o //imposto deve ser de 13% mais R$100,00.
//Caso contrário, o valor do imposto deverá ser (1% * o número de ítens no orçamento).
//class IHIT extends TemplateDeImpostoCondicional {

      public function deveUsarMaximaTaxacao(Orcamento $orcamento) {
        $noOrcamento = Array();

        foreach($orcamento->getItens() as $item) {
          if(in_array($item->getNome(),$noOrcamento)) return true;
          else $noOrcamento[] = $item->getNome();
        }

        return false;
      }
      protected function maximaTaxacao(Orcamento $orcamento) { 
        return $orcamento->getValor() * 0.13 + 100;
      }
      protected function minimaTaxacao(Orcamento $orcamento) {
        return $orcamento->getValor() * (0.01 * count($orcamento->getItens()));
      }
    }
3 respostas

Olá, Gustavo.

Não sei se entendi bem sua dúvida, mas vamos lá.

O que o método deveUsarMaximaTaxacao faz é: Criar um array vazio e para cada item no orçamento passando por parâmetro, adicioná-lo a este array. Mas, antes de adicionar a este array, faz-se a verificação se ele já existe no array. Caso já exista, sai do loop e retorna true, indicando que deve utilizar taxação máxima. Se adicionar todos os itens no array, quer dizer que não há itens repetidos, e retorna false.

Espero ter esclarecido.

Abraços.

Olã Carlos, obgado por interagir porem continuo com a duvida. Na verdade a leitura que eu dou, a qual não entendo, é seguinte: cria o array() , para cada item em orcamento o chama de $item. e caso encontre um nome dentro do array noOrcamento ai blz, return true. esta é a parte que nao entendo, pois como vai encontrar nada em noOrcamento sendo que acima o declarou como um array vazio? pois o carregamento do array getItems ele esta fazendo com o foreach em item e nao em noOrcamento. Entende agora minha duvida? in_array busca um elemento em um array e se existe retorna true, porem noOrcamento deveria de estar vazio. Quando foi carregado?

$noOrcamento = Array();

foreach($Orcamento->getItems() as $item) { if(in_array($item->getNome(),$noOrcamento)) return true; else $noOrcamento[] = $item->getNome(); }

Gustavo, na primeira iteração do foreach o array está vazio, mas repare que no else, o item do orçamento é adicionado a ele, e na próxima iteração a mesma verificação será realizada, com o próximo item do orçamento, entende?

Eu to respondendo no celular, então fica difícil de exemplificar melhor, mas me diz se continua com a dúvida que eu posso tentar explicar melhor.

Abraços!