El problema es que esos id, pueden ser hijos o padres de otros, así que no quiero que se me repitan en el árbol pues no tiene sentido...
Lo que quiero es eliminar de mi $data principal los elementos que ya la función recursiva haya leído. Este es más o menos mi ejemplo:
Using perl Syntax Highlighting
- sub categoryTreeMecaE{
- my $self = shift;
- my $dbh = $self->dbh;
- my $data = shift;
- my $id_conf = shift;
- our @ids_meca; # usado para que verificar que no se repitan mecanismos en el árbol
- my $childs;
- my $i = 0;
- foreach my $d(@$data){
- my $ID = $d->{id_mecanismo};
- if (grep (/$ID/,@ids_meca)){
- splice(@$data, $i, 1);
- next;
- };
- $i++;
- push @ids_meca,$d->{id_mecanismo};
- my $childs = $category->get('mecanismo');
- if( $childs ){
- $childs = $self->categoryTreeMecaE($childs,$id_conf);
- $d->{data}->{'childs'} = $childs;
- }
- }
- return $data;
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Lo que trato de hacer, y ojalá con el mismo foreach(), es:
con push @ids_meca,$d->{id_mecanismo}; guardo el id del mecanismo en una variable global. Cuando la función retorna con otro elemento del array busca si ya se ha leído algún elemento con el mismo id if (grep (/$ID/,@ids_meca)) y ahí es donde necesito borrar del $data, con splice(), con lo que sea, pero que sea con un foreach()... :S NO sé si me hice entender...
Igual eliminé cosas de la función que no necesitaba para que fuera más claro.