Jump to content

Adicionar objetos aos índices de um array


Carlos Rocha
 Share

Recommended Posts

Tenho o dao abaixo:

<?php
class CarrinhoDao {
 private $carrinhoDao = Array();

 public function __construct() {

 }

 public function insereProduto($_produto) {
$carrinhoDao[] = $_produto;

print "<pre>";
print_r($carrinhoDao[]);
print "</pre>";
 }

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

Ele insere objetos da Classe Produtos no array $carrinhoDao.

Isso esta a funcionar corretamente pois ao final da rodagem do código abaixo:

....

$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(3);

$CarrinhoDao->insereProduto($produto1);
$CarrinhoDao->insereProduto($produto2);
$CarrinhoDao->insereProduto($produto3);
....

A saída do print_r é:


Array
(
[0] => Produtos Object
	(
		[idProdutos:Produtos:private] =>
		[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
	)

)
Array
(
[0] => Produtos Object
	(
		[idProdutos:Produtos:private] =>
		[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
	)

)
Array
(
[0] => Produtos Object
	(
		[idProdutos:Produtos:private] =>
		[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
	)

)

Mas a saída da função

...

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

é um array vazio:


Array
(
)

Como resolver isso?

Edited by carcleo
Link to comment
Share on other sites

Me deparei com uma situação difícil agora.

Preciso remover um item nesse array.

Alterei a classe DAO para:

<?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;
 }
}
?>

Agora, o objeto CarrinhoDao terá 2 índices para cada índice primário:

0 -: Objeto Produto

1 - Quantidade

Como posso remover 1 ítem nesse objeto do CarrinhoDao?

Já usei array_splice e unset e não funcionam pois são funçoes de arrays.

Link to comment
Share on other sites

tenho a seguinte classe `CarrinhoDao.php` que cria um array de objetos de `Carrinho.php` que cria um objeto da classe `Produto.php`

Estou fazendo um `foreach` no array resultante:

   <?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>";
   }
   ?>

Isso esta me trazendo o seguinte:

   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
           )

   )

preciso pegar o índice do array resultante no foreach para que, se for o caso, possa deletar o produto do carrinho.

Fiz a função getKey abaixo mas não estou conseguindo pegar o índice;

   <?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;
     }
   }
   ?>

Classe carrinho:

   <?php
   class Carrinho {
     private $produto;

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

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

Como fazer isso?

consegui.

foio só substituir

foreach ($CarrinhoDao->getCarrinho() as $k=>$produto) {
print "Key:".$k."<br>";
}

Obrigado!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.