Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com foreach


Carlos Rocha

Pergunta

Pessoal, tenho o array abaixo que é a sessão de um carrinho de compras.

TCarrinho Object
(
    [item_codigo] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_quantidade] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_peso] => Array
        (
            [0] => 3.24
            [1] => 1.50
        )

    [frete_gratis] => Array
        (
            [0] => s
            [1] => s
        )

)

Preciso fazer uma cotação no webservice dos correios para cada produto. Dái, queria pedir a opinião de vocês de como eu poderia fazer isso.

O script do webservice eu já tenho. Anteriormente eu estava somando o peso total e fazendo a consulta de frete do pacote inteiro. Só que agora, vai ter produto que não terá frete e outro terá. Portanto, preciso calular a somatria de todos os fretes.

A ideia é seguinte:

Para cada codigo do array no carrinho, se o item frete_gatis for sim, envia e calcula o frete no webservice dos correios

Array [item_codigo] 1 se [frete_gratis]==s calcula frete

Array [item_codigo] 2 se [frete_gratis]==s calcula frete

Como eu poderia fazer isso?

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Entendi Serra, minha dificuldade não é essa.

Minha dificuldade é como navegar no array de forma a, para cada código, enviar o peso e calcular no webservice dos correios.

Talvez um foreach. Mas quando faço da classe carrinho um array para o foreach o php diz que não pode fazer da classe um array.

Link para o comentário
Compartilhar em outros sites

  • 0

Carrinho de compras

print_r($_SESSION["MeuCarrinho"]);

Esse print, retorna isso

TCarrinho Object
(
    [item_codigo] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_quantidade] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_peso] => Array
        (
            [0] => 3.24
            [1] => 1.50
        )

    [item_frete_gratis] => Array
        (
            [0] => s
            [1] => s
        )

)
A classe do carrinho
<?php
/*
    Classe TCarrinho
*/
class TCarrinho {
var $item_codigo = array();
var $item_quantidade = array();
    
    /*
        ObtemPosicao
        Este metodo obtem a posicao de um item mediante ao seu codigo, retornando um valor booleano e gravando a posicao na variavel de referencia $posicao, caso o codigo do item esteja no carrinho.
    */
    function ObtemPosicao($codigo,&$posicao){
        //Percorrendo o vetor
        for($i=0;$i<count($this->item_codigo);$i++) {
            if ($this->item_codigo[$i] == $codigo) {
                $posicao = $i;
                return true;
           }
         }

    }/* ObtemPosicao() */
    
    /*
        ObtemPreco
        Este metodo obtem o preço por unidade do produto tendo em mãos o codigo dele.
    */
        function ObtemPreco($codigo)
        {
          @include("global/config/conexao.php");
          $sql_string = "select preco_produtos from produtos where id_produtos =". $codigo;
          $sql = $conexao->query($sql_string);
          list($preco_uni) = $sql->fetch_row();
          $preco_desconto = round($preco_uni-($preco_uni*($_SESSION['desconto_regioes']/100)),2);
          return $preco_desconto;
         }/* ObtemPreco() *
        
    
    /*
        AdicinarItem
        Este metodo adiciona um item no carrinho
    */
    function AdicionarItem($codigo,$quantidade,$peso,$frete_gratis) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
            $this->item_peso[] = $peso;
            $this->frete_gratis[] = $frete_gratis;
        }
    } /* AdicionarItem() */

    /*
        RemoverItem
        Este metodo remove um item do carrinho de compra, passando o codigo do produto
    */
    function RemoverItem($codigo) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou){
            //Removendo o elemento do vetor
            array_splice($this->item_codigo, $posicao, 1);
            array_splice($this->item_quantidade, $posicao, 1);        
            array_splice($this->item_peso, $posicao, 1);        
            array_splice($this->frete_gratis, $posicao, 1);        
        }
            
    } /* RemoveItem() */

    /*
        QuantosItens
        Este metodo retorna a quantidade de itens incluidas no carrinho de compras
    */
    function QuantosItens() {
        return count($this->item_quantidade);
    } /* QuantosItens() */

    /*
        ExcluirTodosItens
        Este metodo retira todos os itens contidos no carrinho de compras
    */
    function ExcluirTodosItens(){
        $this->item_quantidade = null;
        $this->item_codigo = null;
    } /* ExcluirTodosItens() */

    /*
        QuerySQL_ObtemListaDeItens
        Este metodo gera uma parte do codigo SQL que sera usado para buscar os dados
        do carrinho de compra (id, NOME e PREÇO). O comando SQL final tera como finalidade
        de buscar no banco de dados apenas os dados dos itens incluidos no carrinho.
    */
    function QuerySQL_ObtemListaDeItens(){
        $itens = "where ";
        $STR = "";
        if ($this->QuantosItens()>0) {
            $fixo = " id_produtos =";
            for ($i=0;$i<$this->QuantosItens();$i++){
                $STR = $STR . $fixo . " " . $this->item_codigo[$i];
                if ($i+1<$this->QuantosItens()) {
                    $STR = $STR . " or ";
                }
            }
        }
        if (!$STR == "") {
            return $itens . $STR;
        }else{
            //Caso não exista nenhum item no carrinho o codigo final SQL, procurara por um item que não existe na tabela de produtos, neste caso  -1.
            return "where id = -1";
        }
    } /* QuerySQL_ObtemListaDeItens() */

    /*
        ObtemQuantidadeItem
        Este metodo obtem a quantidade de um Item
    */
    function ObtemQuantidadeItem($codigo){
        $posicao = -1;
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou) {
            return $this->item_quantidade[$posicao];
        }else{
            return "erro ao obter quantidade do item";
        }
        
    } /* ObtemQuantidaItem() */

    /*
        ObtemSubTotalDeUmItem
        Este metodo retorna o subtotal de um item (QUANTIDADE * VALOR UNITARIO)
    */
    function ObtemSubTotalDeUmItem($id,$preço){
        $posicao = -1;
        $achou = $this->ObtemPosicao($id,$posicao);
        if ($achou) {
            return ($this->item_quantidade[$posicao]*$preço);
        }else{
            return "erro ao obter sub total do item";
        }
    } /* ObtemSubTotalDeUmItem() */

    /*
        AtualizarCarrinho
        Este metodo coleta todos as variaveis enviadas pelo FORMULARO (method="POST") 
        e atualiza as quantidades dos itens.
    */
    function AtualizarCarrinho(&$VAR_ENVIADAS_PELO_BROWSER){
        //Percorrendo a lista de itens e atualizando suas quantidades
        for ($i=0;$i<$this->QuantosItens();$i++){
            $this->item_quantidade[$i] = $VAR_ENVIADAS_PELO_BROWSER[$this->item_codigo[$i]];
        }
    } /* AtualizarCarrinho() */

} /* Classe TCarrinho */
?>

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Bom, tentei assim:

foreach($_SESSION["MeuCarrinho"] as $key => $value) 
{
  print "$key => $value\n";
}
Saiu assim:
item_codigo => Array
item_quantidade => Array
item_peso => Array
item_frete_gratis => Array
Daí tentei do jeito abaixo para imprimir tambem o array de cada item mas da erro no foreach de dentro
foreach($_SESSION["MeuCarrinho"] as $key => $value) 
{
  foreach($key as $key2 => $value2) 
  {
      print "$key2 => $value2\n";
  }
}
Esse é o erro que dá:
Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

E agora?

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Tudo que eu preciso saber é o seguinte:

São dois produtos nesse array.

Eles tem 4 atributos garvados no array: codigo, quantidade, peso, frete_gratis.

A validação é a seguinte:

Se o item com o primeiro codigo sa lista, seu frete for gratis, pega a quantidade e multiplica pelo peso e envia esses valores para o correio.

Essa é a dificuldade.

alguém ajuda?

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz essa averiguação e parece que deu certo

print "<pre>";
for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
{
  if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
 {
   print "Ok<br />";
 }
 else
 {
   print "Não<br />";
 }
}

Agora é a implemantaçao do frete.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz essa averiguação e parece que deu certo

$total_frete=0.00;

    for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
    {
      if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
     {
      $peso_produto =$_SESSION["MeuCarrinho"]->item_quantidade[$i] * $_SESSION["MeuCarrinho"]->item_peso[$i];
      include ('frete.php');
     }
    }

Agora é a implementação do frete.

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Ficou assim:

$total_frete=0.00;

    for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
    {
      if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
     {
      $peso_produto =$_SESSION["MeuCarrinho"]->item_quantidade[$i] * $_SESSION["MeuCarrinho"]->item_peso[$i];
      include ('frete.php');
     }
    }
    $valor_final = $total_frete + $_SESSION["preco_total"];
    include ('form_fechamento.php');

Pode fechar o tópico

Obrigado a todos.

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...