Ver Mensaje Individual
  #6  
Antiguo 29-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Simplemente hazlo por partes, por ejemplo


Código PHP:
// Llenas un arreglo de fechas asignando sólo el campo dia
$fecha[0]['dia'] = strtotime('2004-12-24');
$fecha[1]['dia'] = strtotime('2004-12-28');
$fecha[2]['dia'] = strtotime('2004-12-31');

// llenas un arreglo de operadores
$operador[0] = array(
  
'ope' => 'ope01''Visitas' => '7'
  
'HorasTrabajadas' => '3''EnviosSala' => '5');

$operador[1] = array(
  
'ope' => 'ope02''Visitas' => '3'
  
'HorasTrabajadas' => '12''EnviosSala' => '7');

// asignas estos operadores a la primera fecha
$fecha[0]['operador'] = $operador;

/*
  de la misma forma asignas operadores a la segunda fecha
*/

// asignas el arreglo de fechas a una campana
$campana = array('campana' => '01''descripcion' campana 01');
$campana['
fecha'] = $fecha; 
Por otra parte- aunque es cuestión de estilo de programación - yo cambiaría
algunos nombres. Es confuso hablar de $campana['fecha'] cuando en realidad
son varias fechas; mejor sería $campana['fechas']. Lo mismo con $campana
['fecha'][0]['operador'] ya que son varios operadores, así que mejor sería
$campana['fechas'][0]['operadores'].

También, aunque es prácticamente lo mismo en cuanto a nomenclatura, yo
preferiría usar clases para estructuras tan ramificadas como las que tienes.

Por ejemplo, implementaría estas tres clases:


Código PHP:
class Operador
{
  var 
$operador;
  var 
$visitas;
  var 
$horas_trabajadas;
  var 
$envios_sala;
}

class 
Fecha
{
  var 
$dia;
  var 
$operadores;

  function 
Fecha()
  {
    
$this->operadores = array();
  }
}

class 
Campana
{
  var 
$campana;
  var 
$descripcion;
  var 
$fechas;

  function 
Campana()
  {
    
$this->fechas = array();
  }

Los métodos de una clase los implementas dentro de la misma definición de la
clase. El método cuyo nombre es igual al nombre de la clase es el constructor
donde puedes aprovechar para inicializar algunos valores como en el caso de
Fecha y Campana en donde inicializo las propiedades operadores y fechas a
arreglos vacíos.

$this, dentro de una clase es equivalente al Self de Delphi.

Para instanciar una clase usas su constructor y el operador new:


Código PHP:
$campana = new Campana(); 
Cada elemento del arreglo $campana->fechas deberás crearlo también con
new Fecha() y lo mismo para la propiedad operadores de la clase Fecha. Aquí
algunos ejemplos:


Código PHP:
// llenar campos descriptivos de $campana
$campana->campana '01';
$campana->descripcion 'primera campana';

// agregar dos instancias de la clase Fecha al arreglo $campana->fechas
$campana->fechas[0] = new Fecha();
$campana->fechas[0]->dia strtotime('2004-01-01');

$campana->fechas[1] = new Fecha();
$campana->fechas[1]->dia strtotime('2004-01-02');

// agregar dos operadores a la fecha 0
$campana->fechas[0]->operadores[0] = new Operador();
$campana->fechas[0]->operadores[0]->operador 'ope01';

$campana->fechas[0]->operadores[1] = new Operador();
$campana->fechas[0]->operadores[1]->operador 'ope02';

// agregar tres operadores a la fecha 1
$campana->fechas[1]->operadores[0] = new Operador();
$campana->fechas[1]->operadores[0]->operador 'ope03';

$campana->fechas[1]->operadores[1] = new Operador();
$campana->fechas[1]->operadores[1]->operador 'ope01';

$campana->fechas[1]->operadores[1] = new Operador();
$campana->fechas[1]->operadores[1]->operador 'ope12'
A un constructor le puedes pasar parámetros para facilitar un poco la
escritura. Por ejemplo, el constructor de la clase Fecha lo puedes cambiar
así:


Código PHP:
  function Fecha($dia)
  {
    
$this->dia $dia;
    
$this->operadores = array();
  } 
de manera que


Código PHP:
// agregar dos instancias de la clase Fecha al arreglo $campana->fechas
$campana->fechas[0] = new Fecha();
$campana->fechas[0]->dia strtotime('2004-01-01');

$campana->fechas[1] = new Fecha();
$campana->fechas[1]->dia strtotime('2004-01-02'); 
lo reduces a


Código PHP:
$campana->fechas[0] = new Fecha(strtotime('2004-01-01'));
$campana->fechas[1] = new Fecha(strtotime('2004-01-02')); 
Finalmente, aunque no venga al caso, cuando tengo estructuras tan
ramificadas suelo poner:


Código PHP:
<pre>
<?
  print_r
($campana);
?>
</pre>
para poder ver la estructura completa y saber así si estoy en el camino correcto en la jungla .

// Saludos

Última edición por roman fecha: 29-12-2004 a las 21:09:48.
Responder Con Cita