Sitio de asuntos y tópicos acerca de VENENUX GNU/Linux, multimedia, y comunidad, para paquetes de emulación y otros visita McKAY bros..

Indice reciente de contenidos:

Repositorio Programas para VENENUX: http://venenux.org/repos/venenux/
Paquetes de Juegos y emuladores para VENENUX: http://74.86.158.5/~op0014t/mckayemu/
Nuevo foros de VENENUX : http://foros.venenux.org

gambas3: collections of collections asi como php array of arrays

|
Esos chicos que codifican en php encontrarán gracioso que hacer objetos de datos en tablas sea fácil .. matrices, arrays .. por eso que en php una matriz puede manejar cualquier valor, y el índice puede ser cualquier tipo, no sólo índices enteros. El artículo se inspiró en un problema en la lista de correo gambas:
Http://gambas.8142.n7.nabble.com/collection-of-collection-problem-tp58654p58659.html

Pero espera, en php, una matriz puede manejar múltiples matrices, que no es lo mismo de una matriz multidimensional! ¡cuidado! Que es el mejor en este caso especial de este artículo!

Quiero decir: una matriz dentro de una matriz! Y los valores y la clave de los arrays pueden ser de cualquier tipo .. genial!
En java, hay alguna dificultad, una colección es la única manera de hacer eso y hay otro, sólo un tipo de valores pueden manejar en una colección.

Desafortunadamente en Gambas su más duro todavía: debe ser colecciones y debe iterar dos veces para manejar otro.

Un Ejemplo:

..un objeto "orden" que tiene asociado muchos "productos" entonces: 

La data ejemplo:

Main object: object (1 elemento con muchos atributos) y uno de estos es el cod_contenido, de los productos de la orden 
Second objects: attr:cod_contenido varios objetos con muchos atributos y muchos de esos objetos

|-----------------------------|
|   ORD101                    |
|-----------------------------|
| cod_orde:101                |
| des_order:description bla bl|----------------------------|
| cod_contents:1011           |        CON1011             |
|-----------------------------|----------------------------|
                              |    cod_product:101,        |
                              |    cod_order:101,          |
                              |    can_product:2           |
                              |----------------------------|
                              |    cod_product:102         |
                              |    cod_order:101           |
                              |    can_product:12          |
                              |----------------------------|

Hacerlo con php:

muy facil dentro del arreglo inicial se coloca como un valor el otro arreglo solo dos iteraciones:

$conn = mysqli_connect($servername, $username, $password, $dbname);
$orders = "SELECT * FROM almorder WHERE cod_order = '001'";
$ordersproducts = "SELECT * FROM alorderproducts WHERE cod_order = '001'";
$result = mysqli_query($conn, $orders);
foreach($result as $keyname => $valuename) 
{
    $orderarray[$keyname] = $valuename; 
    if ( $keyname == 'cod_contenido' )
    {
        $resultdet = mysqli_query($conn, $ordersproducts);
        foreach($resultdet as $keynamedet => $valuenamedet)
        {
            $orderdetail[$keynamedet] = $valuenamedet;
        }
        $orderarray[$keyname] = $valuename;
    }
}

Hacerlo con Gambas:

En gamgas es una complicacion, hay que iterar dos veces por cada objeto, y no se puede usar arreglos, sino colleciones.. puesto que los arreglos son de un solo tipo:

orders = "SELECT * FROM almorder WHERE cod_order = '001'";
ordersproducts = "SELECT * FROM alorderproducts WHERE cod_order = '001'";
rset = $conexion.Exec(orders)
For Each rset
    columnas = New Collection(gb.IgnoreCase)
    For Each hField In rset.Fields
        columnas.Add(hField.Name), rset[hField.Name])
        if ( Comp(hField.Name, "cod_contenido") == 0 ) then
            rsetdet = $conexion.Exec(ordersproduts)
            filasdet = New Collection(gb.IgnoreCase)
            For Each rsetdet
                columnasdet = New Collection(gb.IgnoreCase)
                For Each hFieldet In rsetdet.Fields
                    columnasdet.Add(hFieldet.Name), rsetet[hFieldet.Name])
                Netx
                filasdet.Add(columnaset, rset!cod_contenido)
            Next
            columnas.Add(filasdet, "cod_contenido")
        Endif
    Next
    filas.Add(columnas, rset!cod_despacho)
Next

!



No hay comentarios:

Publicar un comentario

Complacidos de que te expreses, por favor identificate si es posible!