Recursividad en PHP
Hoy vamos a trabajar algo con lo que me he encontrado de frente en una entrevista, cuando me pidieron que hiciera un algoritmo recursivo, y me di cuenta de que no había hablado sobre la recursividad en PHP, de modo que vamos a ello.
La recursividad en PHP se da cuando una función se llama a si misma, es decir cuando hay una llamada a la función en el código que tiene su ámbito para ello se debe de cambiar el argumento con el que trabajamos. Algo parecido a esto de forma muy esquematica:
function recursiva($arg){ recrusiva ($arg2); }
Como toda función esta debe de ser invocada para que se ejecute el código que guarda.
Pero como siempre veamos algún ejemplo de todo esto. Sin duda alguna uno de los más comunes es el del número factorial:
function factorial($n){ if($n==1) return 1; else return $n * factorial($n-1); } $resultado = factorial(3); echo $resultado
Como vemos se invoca a la función factorial que recibe como argumento $n, la función comprueba si $n es uno y si no lo es multiplica el valor de $n por la invocación de si misma cambiando el argumento por $n-1 de este modo se va haciendo una especie de bucle que se recorre hasta que termina de calcular el factorial, es decir hasta $n=1.
Cualquiera con algo de conocimientos de programación, podría decir que el problema del factorial se puede resolver por ejemplo con un bucle while o con un for, y es cierto pero hay muchas situaciones que solo se pueden resolver por medio de esta recursividad, como por ejemplo si tenemos un árbol de arrays numéricos y queremos sumar todos los números. En ese caso debemos de hacer una función recursiva similar a la siguiente:
$var = array ( 1, 2, 5, 8, array(2,3, array(1,2)) ); function recorrido($arg){ $suma = 0; foreach ($arg as $key => $value) { if (is_array($value)){ $array2 = $arg[$key]; $suma = $suma + recorrido($array2); }else { $suma = $suma + $value; } } return $suma; } $total = recorrido($var); echo $total;
Aquí declaramos un array de arrays que es con el que vamos a trabajar, después definimos la función recursiva, que consiste en un foreach que recorre el array y donde elemento a elemento se va analizando si este es o no un array, si no lo es suma el valor al resultado total, y si lo es crea un argumento para llamarse a si misma y continuar haciendo recorriendo el array en profundidad.
En el ejemplo dado nos da como resultado 24 que es el resultado de sumar todos los elementos del array principal y sus ramificaciones.
Hola. eso esta bien, de no regalar codigo. cuantame cuanto puedes cobrar por hacerme un plugin que haga mas o menos esto que necesito? ya el plugin de por si trabaja con affiliatewp, pero no cumple esta funcionalidad recursiva ascendente, solo que lo hace descendente.
lamentablemente ahora mismo tengo problemas de salud y ando de hospital en hospital y no puedo atender ningun proyecto externo, lo siento…
Hola, como estas? Me gustaria saber como puedo realizar una funcion recursiva para ser utilizado en una busqueda d elos patrocinadores ascendentes en un algoritmo de mercadeo en red multinivel. es decir, necesito en esa funcion recursiva saber quienes son los patrocinadores de un nuevo inscrito en n niveles ascendentes. el papa o sponsor de el nuevo afiliado o inscrito, luego el abuelo, luego el bisabulo, luego el tatarabuelo y asi sucesivamente N niveles. Podriamos hacerlo con una funcion recursiva? puedes intentar regalarme un codigo de ejemplo utilizando tres cuatro, o mas campos de seleccion siendo el principal el campo ID y el campo Id_Sponsor y el tecer campo puede ser nivel ascendente, y nombres y datos de cada miembro. por ejemplo
Id
01. Pedro trae a juan (Id = 05)
05. Juan trae a Jose (Id = 10)
10. Jose trae a Rodolfo (Id =15)
15. Rodolfo trae a Maria (Id 19)
19. Maria trae a mialtoweb (Id 25)
25: Mialtoweb trae a muchos mas suscriptores, por ejemplo: 34, 45, 56 , 78)
Entonces:
La funcion debe irme recorriendo desde cada uno de ellos la consulta e irla imprimiendo en archivo o por pantalla, o guardarla en BBDD. desde el punto de partida(Id) Hacia arriba. ejemplo si tomamos el Id =78, Su lista ascendente se imprimiria asi :
01. Pedro Up- Level 6
05. Juan Up- Nivel 5
10. Jose Up- Nivel 4
15. Rodolfo Up- Nivel 3
19. Maria Up- Nivel 2
25. Mialtoweb Up- Nivel 1
En este ejemplo son 6 Niveles, lo cual es una variable, puede ser mas o menos niveles.
Puede usted ayudarme con esto?
Hola, antes de nada decirte que hace mucho tiempo que dejé de «regalar» código, las buenas intenciones no pagan la luz ni llenan las neveras, pero para hacer esto yo intorduciría un campo en la tabla con la id del padre y luego a la hora de recorrer como se ve en el código de ejemplo que hay en la entrada pues crear una variable que capture la id del abuelo, del tatarabuelo… e ir creando tu objeto o tu array que luego ya pintarías.