Skip to content

Instantly share code, notes, and snippets.

@demonio
Last active January 27, 2016 15:46
Show Gist options
  • Save demonio/3ae388eefc0b6c0960b1 to your computer and use it in GitHub Desktop.
Save demonio/3ae388eefc0b6c0960b1 to your computer and use it in GitHub Desktop.
Método para montar una matriz anidada en base a un campo con un valor denominado peso.

Si queremos mostrar una lista anidada en una vista antes debemos montar un matriz en el modelo. Esta es una forma rapida de hacerlo y de ampliar aunque quiza te guste que de paso sea recursiva. Te invito a mejorarla y me lo muestras.

<?php
/*
* A PARTIR DE UN OBJETO AR CON UN CAMPO LLAMADO PESO Y UN FORMATO DE NUMEROS
* SEPARADOS POR PUNTOS, OBTENEMOS UNA MATRIZ ANIDADA PARA SU PRESENTACION EN
* ARBOL.
*
* EJEMPLO:
* 1
* 1.1
* 1.2
* 2
* 2.1
* 3
* 4
* 4.1
* 4.1.1
*/
class HojaRuta extends ActRecord
{
public function mostrarArbol()
{
$items = $this->allNoDeleted();
return $this->arbol($items);
}
public function arbol($items)
{
foreach ($items as $item)
{
$w = $item->Peso;
$l = explode('.', $w);
$c = count($l);
if ($c == 1) $a[$l[0]] = $item;
else if ($c == 2) $a[$l[0]]->Hijos[$l[1]] = $item;
else if ($c == 3) $a[$l[0]]->Hijos[$l[1]]->Hijos[$l[2]] = $item;
else if ($c == 4) $a[$l[0]]->Hijos[$l[1]]->Hijos[$l[2]]->Hijos[$l[3]] = $item;
}
return $a;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment