Catch the index of the array in the foreach

Asked

Viewed 2,095 times

0

I have the following class CarrinhoDao.php creating an array of objects from Carrinho.php that creates a class object Produto.php

I’m making a foreach in the resulting array:

<?php
 require_once "controlls/util/Conexao.php";
 require_once "controlls/models/Produtos.php";
 require_once "controlls/models/Carrinho.php";
 require_once "controlls/daos/ProdutosDao.php";
 require_once "controlls/daos/CarrinhoDao.php";
 require_once "controlls/util/PhpUtil.php";

$connection = new Conexao();
$conexao = $connection->abreConexao();

$CarrinhoDao = new CarrinhoDao();
$produtoDao = new ProdutosDao($conexao);
$produtoDao = new CarrinhoDao($conexao);
$phpUtil = new PhpUtil();

$produto1 = new Produtos(10, 2, "TesteA", "pmg", 124, 13.40, "n", "", "n");
$produto2 = new Produtos(11, 1, "TesteB", "pmg", 12, 13, "n", "", "n");
$produto3 = new Produtos(12, 2, "TesteC", "pmg", 1, 13.04, "n", "", "n");

$produto1->setIdProdutos(1);
$produto2->setIdProdutos(2);
$produto3->setIdProdutos(2);

$CarrinhoDao->insereProduto($produto1, 1);
$CarrinhoDao->insereProduto($produto2, 2);
$CarrinhoDao->insereProduto($produto3, 3);

print "<pre>";
print_r($CarrinhoDao->getCarrinho());
print "</pre>";

foreach ($CarrinhoDao->getCarrinho() as $produto) {
    print "Key:".$produto->getKey()."<br>";
    print "Nome: ".$produto[0]->getNome()."<br>";
    print "Quantidade: ".$produto[1]."<br><br>";
}
?>

This is bringing me the following:

Array
(
    [0] => Array
        (
            [0] => Produtos Object
                (
                    [idProdutos:Produtos:private] => 1
                    [codigoProdutos:Produtos:private] => 10
                    [tipo:Produtos:private] => 2
                    [nome:Produtos:private] => TesteA
                    [tamanho:Produtos:private] => pmg
                    [estoque:Produtos:private] => 124
                    [preco:Produtos:private] => 13.4
                    [promo:Produtos:private] => n
                    [imagem:Produtos:private] => 
                    [reservado:Produtos:private] => n
                )

            [1] => 1
        )

    [1] => Array
        (
            [0] => Produtos Object
                (
                    [idProdutos:Produtos:private] => 2
                    [codigoProdutos:Produtos:private] => 11
                    [tipo:Produtos:private] => 1
                    [nome:Produtos:private] => TesteB
                    [tamanho:Produtos:private] => pmg
                    [estoque:Produtos:private] => 12
                    [preco:Produtos:private] => 13
                    [promo:Produtos:private] => n
                    [imagem:Produtos:private] => 
                    [reservado:Produtos:private] => n
                )

            [1] => 2
        )

    [2] => Array
        (
            [0] => Produtos Object
                (
                    [idProdutos:Produtos:private] => 2
                    [codigoProdutos:Produtos:private] => 12
                    [tipo:Produtos:private] => 2
                    [nome:Produtos:private] => TesteC
                    [tamanho:Produtos:private] => pmg
                    [estoque:Produtos:private] => 1
                    [preco:Produtos:private] => 13.04
                    [promo:Produtos:private] => n
                    [imagem:Produtos:private] => 
                    [reservado:Produtos:private] => n
                )

            [1] => 3
        )

)

I need to take the index of the resulting array in the foreach so that, if applicable, I can delete the product from the cart.

I did the job geKey below but I’m not getting the index;

<?php
class CarrinhoDao {
  private $carrinhoDao = Array();
  private $cont = 0;
  public function __construct() {

  }

  public function insereProduto($_produto, $_qtde) {

      $this->carrinhoDao[$this->cont][0] = $_produto;
      $this->carrinhoDao[$this->cont][1] = $_qtde;

      $this->cont++;
  }

  public function getCarrinho () {
      return $this->carrinhoDao;
  }

  public function getKey () {
      return key($this->carrinhoDao);
  }

  public function removeItem ($_item) {
      unset($this->carrinhoDao[$_item]);
  }

  public function alteraItem ($_item, $qde) {
      $this->carrinhoDao[$_item][1] = $qde;
  }
}
?>

Trolley class:

<?php
class Carrinho {
  private $produto;

  public function __construct($_produto) {
      $this->produto = $_produto;
  }

  public function getProduto () {
      return $this->produto;
  }
}
?>

How to do this?

  • The product must be removed by your id and not by position in the array. This product array is a little strange ... inside a numeric index has another two one is the product and the other I have no idea what it is.

  • Yes, the logic is this. Each index of the final array will have 2 sub-indices. 0 with Product object and index 1 with quantity

  • See if you can get the right key with $k, &#xA;foreach ($trolley->getCarrinho() as $k => $product) { echo $k;}`

  • that’s right. Thank you!

1 answer

1

You can pick up the cart index in the foreach with an auxiliary variable.

foreach ($CarrinhoDao->getCarrinho() as $indice => $produto){
   echo $indice .'<br>';
} 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.