<?php
 
/******************************************************************************
 
 *       BBBB         AAA    RRRR    BBBB      AAA    ZZZZZZ  U     U  L           *
 
 *       B   B    A    A    R    R   B   B     A   A       ZZ  U     U  L           *
 
 *       B   B   A     A  R    R   B   B    A      A        ZZ   U     U  L           *
 
 *       BBBB       A     A  RRRR    BBBB    A     A     Z    U     U  L           *
 
 *       B   B   AAAAAAA  R  R    B   B   AAAAAAA    Z     U     U  L           *
 
 *     B    B  A     A  R   R   B    B  A     A   ZZ     U     U  L           *
 
 *     B    B  A     A  R    R  B    B  A     A  ZZ       U   U   L           *
 
 *     BBBBB   A     A  R    R  BBBBB   A     A  ZZZZZZ    UUU    LLLLLLL     *
 
 ******************************************************************************/
 
 
/* Ejemplo de utilización de Lista Genérica en múltiples niveles
 
 * Descripción: En este ejemplo se muestra el uso de una lista encadenada
 
 * utilizando datos de tipo Objeto.
 
 * Autor: Matías Montes
 
 * Versión : 2.0
 
 */
 
 
/******************************************************************************/
 
/* Librerías y definiciones requeridas */
 
/*-------------------------------------*/
 
 
require_once("class.Lista.php");
 
 
if( !defined("MAX") ) define("MAX", 10);
 
 
 
class Nivel1
 
{
 
    var $clave;
 
    var $sublista;
 
 
    function Nivel1($clave)
 
    {
 
        $this->clave = $clave;
 
        $this->sublista = new Lista("CompararNivel2");
 
    }
 
}
 
 
function CompararNivel1($DatoEnteroIzq , $DatoEnteroDer)
 
{
 
   $resultado = IGUAL;
 
 
   if ( ($DatoEnteroIzq->clave) == ($DatoEnteroDer->clave) ) $resultado = IGUAL;
 
   if ( ($DatoEnteroIzq->clave) >  ($DatoEnteroDer->clave) ) $resultado = MAYOR;
 
   if ( ($DatoEnteroIzq->clave) <  ($DatoEnteroDer->clave) ) $resultado = MENOR;
 
 
   return resultado;
 
}
 
 
function CompararNivel2($DatoEnteroIzq , $DatoEnteroDer)
 
{
 
 
   $resultado = IGUAL;
 
 
   if ( ($DatoEnteroIzq) == ($DatoEnteroDer) ) $resultado = IGUAL;
 
   if ( ($DatoEnteroIzq) >  ($DatoEnteroDer) ) $resultado = MAYOR;
 
   if ( ($DatoEnteroIzq) <  ($DatoEnteroDer) ) $resultado = MENOR;
 
 
   return $resultado;
 
}
 
 
/******************************************************************************/
 
/* Programa Principal */
 
/*--------------------*/
 
 
//Instancio la lista de Nivel 1
 
$L = new Lista("CompararNivel1");
 
 
//Cargo la lista en 2 niveles
 
for( $i=0 ; $i<MAX ; $i++ )
 
{
 
    $datoN1 = new Nivel1($i);
 
    for( $j=1 ; $j<MAX ; $j++ )
 
    {
 
        $datoN2 = $j + $i * MAX;
 
        $datoN1->sublista->insertarDato($datoN2);
 
    }
 
    $L->insertarDato($datoN1);
 
}
 
 
//Imprime el contenido de la lista
 
$cursor1 = $L->primero();
 
 
echo "<UL>\n";
 
while( $cursor1!=$L->fin() )
 
{
 
    $datoN1 = $L->getDato($cursor1);
 
    echo "  <LI>".$datoN1->clave."\n";
 
    echo "    <UL>\n";
 
 
    $cursor2 = $datoN1->sublista->primero();
 
    while( $cursor2!=$datoN1->sublista->fin() )
 
    {
 
        $datoN2 = $datoN1->sublista->getDato($cursor2);
 
        echo "      <LI>".$datoN2."</LI> \n";
 
        $cursor2 =& $datoN1->sublista->siguiente($cursor2);
 
    }
 
 
    echo "    </UL>\n";
 
    echo "  </LI>\n";
 
 
    $cursor1 =& $L->siguiente($cursor1);
 
}
 
echo "</UL>\n";
 
 
//Destruyo la lista
 
$L->destruir();
 
?>
 
 |