Foros del Web » Programando para Internet » PHP »

contar items en una funcion recursiva

Estas en el tema de contar items en una funcion recursiva en el foro de PHP en Foros del Web. hola tengo una funcion recursiva y no se como sacar el total de los items Código PHP: function  get_mlm_listing () {               global  $wpdb ; ...
  #1 (permalink)  
Antiguo 22/05/2013, 05:36
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
contar items en una funcion recursiva

hola tengo una funcion recursiva y no se como sacar el total de los items

Código PHP:

function get_mlm_listing() {
    
    
    global 
$wpdb;
    global 
$current_user;
    if (isset(
$_GET["current_user_id"]) && !empty($_GET["current_user_id"]))
    {
        
$current_user_id $_GET["current_user_id"];
    }
    else 
    {
        
$current_user_id $current_user->ID;
    }
    
    
    
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$current_user_id));
    
    
    if (
$users == null && $current_user->ID == $current_user_id)
    {
        echo 
"<br />";
        echo 
"No tienes miembros en tu red";
        
//echo "You don't have any members below you yet, here is your referral link: \r
        /*<a href=" . get_bloginfo("url"). "/" . $current_user->ID . ">" . get_bloginfo("url") . '' . "/" . $current_user->ID . "</a><br />";
         */
    
}
    else 
    {
             
        
        
        function 
dependientes($nivel$ulclassDependiente$current_user_id ) {
            
            global 
$wpdb;
                    
            
//$q = mysql_query($sql);
            
            // Para cada dependiente del nivel solicitado...
            
            
            
            
            // Iniciamos la creación de la lista
            
$lista '<ul>';
            
            
// Obtenemos los datos los dependientes del nivel solicitado
            
            
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$nivel));
            
//$sql = sprintf("SELECT id, nombre, jefe FROM funcionario WHERE jefe = %s", $nivel);
            
            //$mostrarMail = true;
            
            //while ($r = count($usersA))  {
            
foreach ($users as $obj){  // le digo que me muestre una i que va a ser el contador
            
                
                
                
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
                    
$user_email "";
                
                
$user_nicename $wpdb->get_var($wpdb->prepare("SELECT user_nicename FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
$user_profile trim(str_replace(" """strtolower($obj->login_id)));
                
$url site_url();
                
                
                
$wpmlm_contact "<a href='" $url "/members/" $user_nicename "' target='_blank'>[Contacar con el usuario]</a>&nbsp;&nbsp; <b>".$user_email."</b> ";
                
                
// Abrimos el nodo con el nombre del primer dependiente
                
                
                
                
                
                
$user_count $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM mlm WHERE parent_user_id = %d"$obj->user_id));
                
                
$lista .= '<li> ';
                
                
$lista .= "<b>" $obj->login_id " (" $user_count ")</b>&nbsp;&nbsp; " $wpmlm_contact ;
                
                
// Utilizaremos esta variable para ver si seguimos consultado la BDD
                
$tiene_dependientes null;
                
//$sql = sprintf("SELECT COUNT(jefe) FROM funcionario WHERE jefe = %s", $r['jefe']);
                //Corregido                
                
                
$tiene_dependientes $user_count;
                
                
                
// Si tiene dependientes, ejecutamos recursivamente
                // tomando como parámetro el nuevo nivel
                
if ($tiene_dependientes) {
                    
// Eliminado: $lista .= get_categories($r['jefe']);
                    //$lista .= dependientes($r['jefe']);
                    //Corregido
                    
$ulID "";
                    
$lista .= dependientes($obj->user_id$ulclassDependiente$current_user_id);
                } 
                
                
// Cerramos el nodo
                
$lista .= '</li> ';
                
            }
            
                        
            
// Cerramos la lista
            
$lista .= '</ul> ';
            return 
$lista;
            
            
    
        }
        echo 
'<div id="sidetreecontrol"><a href="?#">Colapsar todo</a> | <a href="?#">Expandir tdo</a></div>';
        echo 
"<div id='mlm_members'> \n";    
        echo 
dependientes($current_user_id$ulclassDependiente$current_user_id);
        echo 
"</div><!-- fin #mlm_members --> ";
        echo  
"<br><br>el total de tu lista es " .count($objCOUNT_RECURSIVE); // muestra 8; 
        
        
    
}


como se puede ver intento hacerlo con count($obj, COUNT_RECURSIVE); pero me devuelve 0

y ya no se por donde meterle mano a esta funcion
  #2 (permalink)  
Antiguo 22/05/2013, 06:48
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: contar items en una funcion recursiva

El código es confuso, para qué declaras una función dentro de otra? Por qué haces output de html dentro de la función? Intenta mejorarlo un poco y postear sólo lo que te da problemas, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 22/05/2013, 07:49
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: contar items en una funcion recursiva

a ver sobre por que se declara una funcion dentro de otra:

por que es el codigo de wordpress y creo que el primero es un constructor para unc clase (no lo se seguro)

sobre lo hacer el outpout de html dentro de la funcion lo hago asi por que quiero que me pinte html se que lo podria hacer con un return pero lo hago con un echo.


la función dependientes es la que me hace la recusividad si no no la pondría.
  #4 (permalink)  
Antiguo 22/05/2013, 07:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: contar items en una funcion recursiva

Está bien la función, se entiende que es recursiva y toda la cosa.

Lo que si está mal es que la declares dentro de otra función, que aunque es válido se considera mala practica.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 22/05/2013, 08:23
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: contar items en una funcion recursiva

entonces la funcion dependientes la tengo que declarar fuera?

y eso me areglará lo de contar los items de la recursividad?
  #6 (permalink)  
Antiguo 22/05/2013, 08:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: contar items en una funcion recursiva

Si y no.

Si, porque nos ayuda a comprender mejor tu código.

No, porque primero debes hacer una cosa bien, un paso a la vez.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 22/05/2013, 10:03
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: contar items en una funcion recursiva

ok

ya esta entonces

esta es la funcion recursiva

Código PHP:
function dependientes($nivel$ulclassDependiente$current_user_id$ulID ) {
                    
                    global 
$wpdb;
                    global 
$ulID;
                    
                    
// Para cada dependiente del nivel solicitado...
                    // Iniciamos la creación de la lista
                    
$lista '<ul>';
                    
                    
// Obtenemos los datos los dependientes del nivel solicitado                        
                    
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$nivel));
                    
                    foreach (
$users as $obj){  // le digo que me muestre una i que va a ser el contador                            
                        
if($ulID == "tiene depedientes"){
                            
$user_email "";
                            }else{
                            
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                        }
                        
                        
$user_nicename $wpdb->get_var($wpdb->prepare("SELECT user_nicename FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                        
$user_profile trim(str_replace(" """strtolower($obj->login_id)));
                        
$url site_url();
                        
                        
$wpmlm_contact "<a href='" $url "/members/" $user_nicename "' target='_blank'>[Contacar con el usuario]</a>&nbsp;&nbsp; <b>".$user_email."</b> " $ulID;
                        
                        
// Abrimos el nodo con el nombre del primer dependiente        
                        
$user_count $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM mlm WHERE parent_user_id = %d"$obj->user_id));
                        
                        
$lista .= '<li> ';                            
                        
$lista .= "<b>" $obj->login_id " (" $user_count ")</b>&nbsp;&nbsp; " $wpmlm_contact ;
                        
                        
// Utilizaremos esta variable para ver si seguimos consultado la BDD
                        
$tiene_dependientes null;
                        
                        
$tiene_dependientes $user_count;
                        
// Si tiene dependientes, ejecutamos recursivamente
                        // tomando como parámetro el nuevo nivel
                        
if ($tiene_dependientes) {
                            
$ulID "tiene depedientes";
                            
$lista .= dependientes($obj->user_id$ulclassDependiente$current_user_id$ulID);
                        } else{
                            
$ulID "";
                        }                            
                        
// Cerramos el nodo
                        
$lista .= '</li> ';
                    }
                    
// Cerramos la lista
                    
$lista .= '</ul> ';
                    return 
$lista;    
                } 
y no se como sacar el total de nodos que me hace el foreach
  #8 (permalink)  
Antiguo 22/05/2013, 10:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: contar items en una funcion recursiva

Si $users es un array puedes contar sus elementos con sizeof(), consulta el manual.

Si no, puedes declarar un variable en cero antes del foreach(), ir incrementando dentro y al final tendrías un número.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 22/05/2013, 11:45
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: contar items en una funcion recursiva

ok esto del count y del sizeof ya lo he pobado

pero al ser una función recursiva no se donde poner el contador para que me de un total

ya que si lo pongo dentro de la funcion y lo pongo asi
Código PHP:
echo "tienes un total de "sizeof($users) . " usuarios"
en cada registro me lo repite.

y no se como hacerlo para que me lo pinte fuera de la funcion
  #10 (permalink)  
Antiguo 22/05/2013, 11:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: contar items en una funcion recursiva

Puedes usar una variable global e incrementarla dentro de tus iteraciones, muy sencillo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 22/05/2013, 13:02
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 1 mes
Puntos: 8
Respuesta: contar items en una funcion recursiva

la verdad que este tema me esta volviendo loco

no me funciona y ha probado de todo todo

Código PHP:
$totalRegistos 0;
        
        echo 
'<div id="sidetreecontrol"><a href="?#">Colapsar todo</a> | <a href="?#">Expandir tdo</a></div>';
        echo 
"<div id='mlm_members'> \n";    
        echo 
dependientes($current_user_id$ulclassDependiente$current_user_id$ulID);
        echo 
"</div><!-- fin #mlm_members --> ";
        echo  
"<br><br>el total de tu lista es " $totalRegistos// muestra 8; 
Código PHP:
function dependientes($nivel$ulclassDependiente$current_user_id$ulID ) {
                    
                    global 
$wpdb;
                    global 
$ulID;
                    global 
$totalRegistos;
                    
                    
                    
                    
// Para cada dependiente del nivel solicitado...
                    // Iniciamos la creación de la lista
                    
$lista '<ul>';
                    
                    
// Obtenemos los datos los dependientes del nivel solicitado                        
                    
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$nivel));
                    
                    foreach (
$users as $obj){  // le digo que me muestre una i que va a ser el contador                            
                        
if($ulID == "tiene depedientes"){
                            
$user_email "";
                            }else{
                            
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                        }
                        
                        
$user_nicename $wpdb->get_var($wpdb->prepare("SELECT user_nicename FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                        
$user_profile trim(str_replace(" """strtolower($obj->login_id)));
                        
$url site_url();
                        
                        
$wpmlm_contact "<a href='" $url "/members/" $user_nicename "' target='_blank'>[Contacar con el usuario]</a>&nbsp;&nbsp; <b>".$user_email."</b> " $ulID;
                        
                        
// Abrimos el nodo con el nombre del primer dependiente        
                        
$user_count $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM mlm WHERE parent_user_id = %d"$obj->user_id));
                        
                        
$lista .= '<li> ';                            
                        
$lista .= "<b>" $obj->login_id " (" $user_count ")</b>&nbsp;&nbsp; " $wpmlm_contact ;
                        
                        
// Utilizaremos esta variable para ver si seguimos consultado la BDD
                        
$tiene_dependientes null;
                        
                        
$tiene_dependientes $user_count;
                        
// Si tiene dependientes, ejecutamos recursivamente
                        // tomando como parámetro el nuevo nivel
                        
if ($tiene_dependientes) {
                            
$ulID "tiene depedientes";
                            
$lista .= dependientes($obj->user_id$ulclassDependiente$current_user_id$ulID);
                        } else{
                            
$ulID "";
                        }                            
                        
// Cerramos el nodo
                        
$lista .= '</li> ';
                    }
                    
// Cerramos la lista
                    
$lista .= '</ul> ';
                    
//$lista .= 'El total de la lista es '.sizeof($users);
                    
$totalRegistos $totalRegistos +1;
                    
//$lista .= $totalRegistos;
                    
return $lista;    
                } 

ya se que para incrementar $totalRegistros lo podría hacer así ++$totalRegistros pero he probado la suma normal por que no me funciona

cuando lo muestro en el navegador me sale 1

ya no se que más tocar ni a quien mas implorar
  #12 (permalink)  
Antiguo 22/05/2013, 13:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: contar items en una funcion recursiva

Para que una variable funcione globalmente también debes ser explicito fuera de contexto, es decir, que debes usar el operador global fuera y dentro de la función para que surta efecto.

PDTA: No te vuelvas loco, si no sabes trabajar con variables globales deberías leer el manual al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: funcion, items, mysql, recursiva, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:18.