Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-12-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
Estructuras?¿

Como se traduce esto a php? Es posible?

Código Delphi [-]
  type
    TOpe = record
    ope              : string;
    Visitas          : string;
    HorasTrabajadas  : string;
    EnviosSala       : string;
  end;

  type
    TFechas = record
    dia      : TDateTime;
    operador : array of TOpe;
  end;

  type
    TCampanas = record
    campana     : string;
    descripcion : string;
    fecha       : array of TFechas;
  end;


Mas que nada lo que me gustaria es poder acceder a los elementos del siguiente modo
Código:
var
  Datos : array of TCampanas;
datos[i].fecha[j].operador[k].HorasTrabajadas
O como no existen punteros (eso he leido) no es posible?



Espero haberme expresado bien

Última edición por CHiCoLiTa fecha: 24-12-2004 a las 12:33:42.
Responder Con Cita
  #2  
Antiguo 27-12-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Basta que utilices el sistema de arrays asociativos de php. No necesitas definir ningun tipo de estructura basta que asignes lo que necesites al vuelo,
puedes asignar arrays dentro de arrays, por ejemplo:

Código PHP:
$datos= array();


// Añadimos el primer elemento al array $datos
$datos[]=  array( 'campana' => '01',
                  
'descripcion' => 'campana numero 01',
                  
'fecha' =>  array(
                                      array( 
'dia' => 1'operador' => ... ),
                                      array( 
'dia' => 2'operador' => ... ),                                                                                   
                                      array( 
'dia' => 3'operador' => ... ),
                                      ...
                                   )
                 );
// Añadimos el segundo elemento al array $datos
$datos[]=  array( 'campana' => '02',
                  
'descripcion' => 'campana numero 02',
                  
'fecha' =>  array(
                                     array( 
'dia' => 1'operador' => ... ),
                                     array( 
'dia' => 2'operador' => ... ),                                                                                   
                                     ...
                                  )
                 ); 
Tienes mas informacion sobre el manejo de arrays, en la ayuda online de php (www.php.net).

Saludos
Responder Con Cita
  #3  
Antiguo 27-12-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Mick tiene mucha razon, los arrays en PHP permiten indices de todas clases, numeros y texot.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #4  
Antiguo 28-12-2004
Avatar de EstebanWeb
EstebanWeb EstebanWeb is offline
Miembro
 
Registrado: dic 2004
Posts: 15
Poder: 0
EstebanWeb Va por buen camino
Recordá que en PHP las variables no son tipadas (no tienen un tipo como integer,char,etc.) son solo contenedores de datos.
Por lo que como digieron los amigos que me antecedieron con array anidados se soluciona el problema

espero que sirva el comentario
Responder Con Cita
  #5  
Antiguo 29-12-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
Ese tipo de arrays los conozco, pero, ¿como le digo yo que quiero insertar un operador de la campaña 3 y la fecha 2?
Lo que no se es recorrerlos para insertar datos o buscar valores dados unos patrones

En delphi primero obtenia las fechas y las metia en la estructura, luego tenia todos los operadores y los añadia por fecha en la estructura, y por ultima obtenia el resto de los datos por operadores / dia y los metia en su correspondiente lugar. Una vez que estaba llena la estructura iba imprimiendo.

Me parece a mi que no tengo demasiado clara la idea de array asociativo

Es decir como meto primero las fechas 01/01/04, 02/01/04
Una vez que tengo todas, meto los operadores ope01, ope02, ope03
y para terminar meter por ejemplo 7 visitas el 01/01/04 al ope01, 2 el 02/01/04 al ope003...

Última edición por CHiCoLiTa fecha: 29-12-2004 a las 14:33:17.
Responder Con Cita
  #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
Poder: 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 22:09:48.
Responder Con Cita
  #7  
Antiguo 30-12-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

roman, estas de vacaciones ¿verdad?, vaya currada!!, esto es una respuesta y lo demas es toneria

Feliz año a todos.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #8  
Antiguo 03-01-2005
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
Sin palabras

Roman me has dejado sin palabras con la clase particular de php. No solo me ha quedado claro como usar los arrays asociativos, sino que tambien me has dado la idea de usar una clase para poder trabajar como queria. Pero no contento con eso, hasta has puesto un ejemplo.

Muchas gracias por tu tiempo y dedicacion
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:20:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi