Tema destacado: Suscripción al boletín mensual de elhacker.net
Autor
|
Tema: funcion recursiva de hijo a padre (Leído 2,867 veces)
|
satan69
Desconectado
Mensajes: 341
|
hola muchachos , quiero saber como puedo hacer , para sacar de un id de un hijo a a todos los siguientes niveles altos ejemplo en el foro tenemos Foro de elhacker.net |-+ Programación | |-+ Desarrollo Web | | |-+ PHP o tambien Foro de elhacker.net -> Programación -> Desarrollo Web -> PHP Programación id 1 parent 0 Desarrollo Web id 2 parent 1 PHP id 3 parent 2 ahora sacamos el id del foro php, y como hacemos para hacer esa estructura de arriba, yo tenia algo asi function url_pagina_categoria($link,$hija,$x){
$sql="SELECT * FROM `contenido` WHERE idcontenido = ".$hija; $result=mysql_query($sql); if($result){
$row = mysql_fetch_array($result);
$nombre = $row['nombre'];
$idcontenido = $row['idcontenido'];
$parent = $row['parent'];
if($x==''){
$x=0;
}
if($parent==0){
$nombre = str_replace(' ','-',$nombre);
$link[$x] = $nombre.$x;
}else{
$x = $x+1;
$nombre = str_replace(' ','-',$nombre);
$link[$x]=$nombre;
url_pagina_categoria($link,$parent,$x);
} }//fin del la funcion revisar si existen datos
return $link;
}
yo lo estaba metiendo en una array porque sale en otro orden ya despues queria ordenarlo con foreach, pero si tienen alguna otra idea de com puedo hacerlo..? gracias de antemano
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
Una solución seria usando MYSQL...
En el registro numero 3 de los campos idcontenido, nombre, parent corresponde los datos de la subpagina PHP, también podía crear un campo que contenga los niveles sobre el...
Lo ideal seria retornar un array asociativo...
|
|
|
|
« Última modificación: 22 Octubre 2010, 00:44 por ~ Yoya ~ »
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
alguna sugerencia de codigo..? por favor
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
Creo que estoy mirando hacia otro tema xD.
Tu problema es el array, quieres que salga de forma mas organizada ya que sale desorganizada no?
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
Creo que estoy mirando hacia otro tema xD.
Tu problema es el array, quieres que salga de forma mas organizada ya que sale desorganizada no?
pues cuando se guarda , sale solo el ultimo que se guarda, y no hay mas elementos ese es el problema el segundo ya solucionando este es que sale de orden desendente ejemplo: PHP -> Desarrollo Web -> Programación -> Foro de elhacker.net asi lo quiero Foro de elhacker.net -> Programación -> Desarrollo Web -> PHP por eso estaba tratando de hacerlo con array para despues ordenarlo, pero si tienes alguna sugerencia pues bienvenido sea xD
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
Oka, mira esta función que hice: <?php function ordenar($text) { $resultado = preg_split("/\s?->\s?/", $text.' ->'); foreach(array_reverse($resultado) as $result) { $valor .= $result." -> "; } $valor = substr($valor,3,strlen($valor)-7); return $valor; } $parent = ordenar('PHP -> Desarrollo Web -> Programación -> Foro de elhacker.net'); echo $parent; ?> Salida: Foro de elhacker.net -> Programación -> Desarrollo Web -> PHP
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
Oka, mira esta función que hice: <?php function ordenar($text) { $resultado = preg_split("/\s?->\s?/", $text.' ->'); foreach(array_reverse($resultado) as $result) { $valor .= $result." -> "; } $valor = substr($valor,3,strlen($valor)-7); return $valor; } $parent = ordenar('PHP -> Desarrollo Web -> Programación -> Foro de elhacker.net'); echo $parent; ?> Salida: Foro de elhacker.net -> Programación -> Desarrollo Web -> PHP exactamente lo que iva hacer, pero mi problema es a la hora de sacar los datos de la base de datos..
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
:silbar:mi problema es a la hora de sacar los datos de la base de datos.. Y cual es tu problema ps, explícate xD
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
:silbar:mi problema es a la hora de sacar los datos de la base de datos.. Y cual es tu problema ps, explícate xD mira la funcion que tengo, a simplevista uno cree que funciona pero no funciona porque no me guarda el arreglo link, cuando quiero imprimirlo con print_r sale solo el ultimo que entro en el arreglo, ahora si tiene mas de 5 padres deberia de salir los 5 no el ultimo, me entiendes..?
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
pero ya eso es problema de tu source, muéstrameel source y trata de detallar un poco mas
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
function url_pagina_categoria($link,$hija,$x){ $sql="SELECT * FROM `contenido` WHERE idcontenido = ".$hija; $result=mysql_query($sql); if($result){ $row = mysql_fetch_array($result); $nombre = $row['nombre']; $idcontenido = $row['idcontenido']; $parent = $row['parent']; if($x==''){ $x=0; } if($parent==0){ $nombre = str_replace(' ','-',$nombre); $link[$x] = $nombre.$x; }else{ $x = $x+1; $nombre = str_replace(' ','-',$nombre); $link[$x]=$nombre; url_pagina_categoria($link,$parent,$x); } }//fin del la funcion revisar si existen datos return $link; } tonces en teorioa yo tendria que hacer esto $link =url_pagina_categoria($link,3,$x) aqui necesito que me regrese un array donde con el codigo que tengo de ordenar o tambien puedo usar el que tu me diste, lo ordeno y creo : Foro de elhacker.net |-+ Programación | |-+ Desarrollo Web | | |-+ PHP Programación id 1 parent 0 Desarrollo Web id 2 parent 1 PHP id 3 parent 2
|
|
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
Te sale solo uno porque usas if y necesitas que el ciclo se vaya repitiendo... <?php $connect = mysql_connect('127.0.0.1', 'root', 'password'); mysql_select_db('ejemplo', $connect); $sql = mysql_query('select id from ejemplo'); while($row = mysql_fetch_array($sql, MYSQL_NUM)) { print_r($row); } ?> Salida: Array ( [0] => 1 ) Array ( [0] => 2 ) Array ( [0] => 3 ) Con if <?php $connect = mysql_connect('127.0.0.1', 'root', 'pass'); mysql_select_db('ejemplo', $connect); $sql = mysql_query('select id from ejemplo'); if($row = mysql_fetch_array($sql, MYSQL_NUM)) { print_r($row); } ?> Salida: Array ( [0] => 1 ) Creo que también tienes un error con el array, aqui un ejemplo: <?php $array[] = 'asa'; $array[] = 5656; $array[] = 1515.545; print_r($array); ?> Salida: Array ( [0] => asa [1] => 5656 [2] => 1515.545 )
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
si te entiendo, pero utilizando funcion recursiva como la que te estaba ensenado..?
|
|
|
|
« Última modificación: 23 Octubre 2010, 18:20 por satan69 »
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 954
|
<?php $connect = mysql_connect('127.0.0.1', 'root', 'pass'); mysql_select_db('ejemplo', $connect); function ejemplo_while($str){ $sql = mysql_query($str); while($row = mysql_fetch_array($sql, MYSQL_NUM)) { $result[] = $row[0]; } return $result; } $sql = ejemplo_while('select id from ejemplo'); print_r($sql); ?> Salida: Array ( [0] => 1 [1] => 2 [2] => 3 )
|
|
|
|
|
En línea
|
|
|
|
satan69
Desconectado
Mensajes: 341
|
<?php $connect = mysql_connect('127.0.0.1', 'root', 'pass'); mysql_select_db('ejemplo', $connect); function ejemplo_while($str){ $sql = mysql_query($str); while($row = mysql_fetch_array($sql, MYSQL_NUM)) { $result[] = $row[0]; } return $result; } $sql = ejemplo_while('select id from ejemplo'); print_r($sql); ?> Salida: Array ( [0] => 1 [1] => 2 [2] => 3 ) gracias por todos los mensajes, pero esa funcion no es recursiva, mira le ejemplo que te puse id 1 Programación parent 0 id 2 Desarrollo Web parent 1 id 3 PHP parent 2 ejemplo quiero sacar todos los padres de php? ese es el ejemplo
|
|
|
|
|
En línea
|
|
|
|
|
|