Nueva pregunta

Pregunta:

Fecha: 20-04-2018 07:35:52 (En Español)

array dentro de clase[Resuelta]

Tengo una clase donde cargo un array dentro de otro array. Con un sub array me funciona bien. Pedo como debo cargar 2 subarrays dentro del primero? Desde ya muchas gracias. Saludos.

Funciona con 1:
$detalleiva = array(
'AlicIva' => array(
'Id' => 5,
'BaseImp' => $baseimp,
'Importe' => $renglon['importeiva']
)
);

No funciona con 2:
$detalleiva = array(
'AlicIva' => array('Id' => $cod_iva1,'BaseImp' => $renglon['base_imp1'],'Importe' => $renglon['importe_iva1']),
'AlicIva' => array('Id' => $cod_iva2,'BaseImp' => $renglon['base_imp2'],'Importe' => $renglon['importe_iva2'])
);


Etiquetas: Votos: 0 - Respuestas: 3 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 20-04-2018 08:39:12 Saludos...
    Lo que tu quieres es hacer un vector (Arreglo de arreglos)
    y su "estructura" es la que comentas, uno o varios arreglos dentro de otro.
    Si lo haces manual seria:

    $Vector=Array();
    $datos1=array('algo'=>'valor','algo2'=>'valor 2');
    $datos3=array('algo'=>'valor','algo3'=>'valor 3');
    $datos4=array('algo'=>'valor','algo4'=>'valor 4');
    $Vector[0]=$datos1;
    $Vector[1]=$datos2;
    $Vector[2]=$datos3;


    o

    $Vector=Array();
    $Vector[0]=array('algo'=>'valor','algo2'=>'valor 2');
    $Vector[1]=array('algo'=>'valor','algo3'=>'valor 3');
    $Vector[2]=array('algo'=>'valor','algo4'=>'valor 4');


    o

    $Vector=Array();
    $Vector[]=array('algo'=>'valor','algo2'=>'valor 2');
    $Vector[]=array('algo'=>'valor','algo3'=>'valor 3');
    $Vector[]=array('algo'=>'valor','algo4'=>'valor 4');



    Saludos :)

    Stryfe™
      Votos: 1 - Link respuesta
     
  • Fecha: 20-04-2018 10:28:56 Muchas gracias. Funcionó. Saludos.   Votos: 0 - Link respuesta
     
  • Fecha: 20-04-2018 10:38:23 El problema del código que muestras es que estás utilizando un array asociativo y utilizas la misma llave ('AlicIva') para los dos elementos y eso no es posible. Renombra las llaves para que sean distintas una de otra: AlicIva0, AlicIva1, AlicIva2, etc.

    Los vectores es una buena opción pero en el caso de OOP tal vez quieras ver otro tipo de estructuras.
    En OOP el uso de arreglos asociativos dentro de un arreglo es un indicador de que puedes usar una clase adicional y una colección de datos.

    En PHP 7.1+ es muy sencillo de hacer:

    <?php
    declare(strict_types=1);
    
    /**
     * Class AlicIva
     */
    class AlicIva
    {
        /** @var int */
        private $id;
        /** @var float */
        private $baseImp;
        /** @var float */
        private $importe;
    
        /**
         * AlicIva constructor.
         *
         * @param int   $id
         * @param float $baseImp
         * @param float $importe
         */
        public function __construct(int $id, float $baseImp, float $importe)
        {
            $this->id      = $id;
            $this->baseImp = $baseImp;
            $this->importe = $importe;
        }
    
        /**
         * Get Id
         *
         * @return int
         */
        public function getId(): int
        {
            return $this->id;
        }
    
        /**
         * Set Id
         *
         * @param int $id
         *
         * @return $this
         */
        public function setId(int $id): self
        {
            $this->id = $id;
    
            return $this;
        }
    
        /**
         * Get BaseImp
         *
         * @return float
         */
        public function getBaseImp(): float
        {
            return $this->baseImp;
        }
    
        /**
         * Set BaseImp
         *
         * @param float $baseImp
         *
         * @return $this
         */
        public function setBaseImp(float $baseImp): self
        {
            $this->baseImp = $baseImp;
    
            return $this;
        }
    
        /**
         * Get Importe
         *
         * @return float
         */
        public function getImporte(): float
        {
            return $this->importe;
        }
    
        /**
         * Set Importe
         *
         * @param float $importe
         *
         * @return $this
         */
        public function setImporte(float $importe): self
        {
            $this->importe = $importe;
    
            return $this;
        }
    }
    
    /**
     * Class DetalleIva
     */
    class DetalleIva implements \IteratorAggregate, \Countable, \ArrayAccess
    {
        /** @var array */
        private $alicIvas = [];
    
        /**
         * AlicIvaCollection constructor.
         *
         * @param array $alicIvas
         */
        public function __construct(array $alicIvas = [])
        {
            array_map([$this, 'add'], $alicIvas);
        }
    
        /**
         * Agrega un elemento a la colección
         *
         * @param AlicIva $alicIva
         *
         * @return $this
         */
        public function add(AlicIva $alicIva): self
        {
            $this->alicIvas[] = $alicIva;
    
            return $this;
        }
    
        /**
         * @return ArrayIterator|Traversable
         */
        public function getIterator()
        {
            return new \ArrayIterator($this->alicIvas);
        }
    
        /**
         * @return int
         */
        public function count(): int
        {
            return count($this->alicIvas);
        }
    
        /**
         * @param mixed $offset
         *
         * @return bool
         */
        public function offsetExists($offset):bool
        {
            return isset($this->alicIvas[$offset]);
        }
    
        /**
         * @param mixed $offset
         *
         * @return mixed
         */
        public function offsetGet($offset)
        {
            return isset($this->alicIvas[$offset]) ?? null;
        }
    
        /**
         * @param mixed $offset
         * @param mixed $value
         */
        public function offsetSet($offset, $value): void
        {
            if (null === $offset) {
                $this->alicIvas[] = $value;
            } else {
                $this->alicIvas[$offset] = $value;
            }
        }
    
        /**
         * @param mixed $offset
         */
        public function offsetUnset($offset): void
        {
            unset($this->alicIvas[$offset]);
        }
    }
    


    Lo usas de la siguiente manera:

    $alicIva1 = new AlicIva(5, 3.1, 100);
    $alicIva2 = new AlicIva(2, 7, 10);
    
    $ivaCollection = new DetalleIva([$alicIva1, $alicIva2]);
    
    echo 'Hay ' . \count($ivaCollection) . " elementos en la colección\n";
    
    foreach ($ivaCollection as $detalle) {
        echo "Id :{$detalle->getId()}\n\tbaseImp:{$detalle->getBaseImp()}\n\tImporte:{$detalle->getImporte()}\n";
    }
    


    Y esto te imprime:
    Id :5
    baseImp:3.1
    Importe:100
    Id :2
    baseImp:7
    Importe:10

    Espero que te sirva.

    Saludos!
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com