Comunidad de diseño web y desarrollo en internet online

Creando arreglos multidimensionales PHP

Citar            
MensajeEscrito el 28 May 2017 05:18 pm
Estimados ,

Tengo una base de datos solo con tres campos: id, IDAfiliado y IDPadrino. La idea es crear un arreglo multidimensional de tres niveles (sistema multinivel), pero tengo problemas para crear el tercer nivel, solo pude llegar al segundo nivel. Es decir, una persona tiene un nivel 1 con hasta 10 personas, en el segundo nivel, cada persona del nivel 1 puede tener hasta 10 personas, y así igual en el tercer nivel
El código que extrae hasta el segundo nivel y que funciona bien es el siguiente:
<?php
if (isset( $_POST['submit'] )) {
$numero_afiliado = ($_POST['numeroafiliado']);
include( 'conexion/conexion-abrir.php' );
#Extraer todas las filas primer nivel
$datosnivel1 = array();
$datosnivel2 = array();
$cantidaddatosdentrodelarreglo = array();
$consulta = "SELECT IDAfiliado FROM DatosAfiliados WHERE IDPadrino='$numero_afiliado'";
$resultado = $conexion -> query($consulta);
//echo "Sus afiliados de este nivel son: " . "<br>";
while($fila = $resultado -> fetch_array())
{
//echo "Afiliado primer nivel inferior: " . $fila["IDAfiliado"] . "<br>";
$datosnivel1[] = $fila["IDAfiliado"];
}
$cuentaregistrosdatosnivel1 = count($datosnivel1);
echo "El afiliado no. $numero_afiliado tiene $cuentaregistrosdatosnivel1 afiliados en este primer nivel.<br>";
echo "<pre>";
print_r($datosnivel1);
echo "</pre>";
echo "<br>Empiezo a buscar el nivel 2:<br><br>";

for($i = 0; $i < count($datosnivel1); ++$i)
{
$consulta = "SELECT IDAfiliado FROM DatosAfiliados WHERE IDPadrino=$datosnivel1[$i]";
$resultado = $conexion -> query($consulta);
while($fila = $resultado -> fetch_array())
{
$datosnivel2[$i][] = $fila["IDAfiliado"];
// AQUÍ INSERTO EL CÓDIGO PARA CREAR LA MATRIZ DE TRES NIVELES
}
echo "En este segundo nivel, si acaso existen, para el afiliado " . $datosnivel1[$i] . " tenemos " . count($datosnivel2[$i]) . " subafiliados.<br>";
$cantidaddatosdentrodelarreglo[$i] = count($datosnivel2[$i]);
echo "<pre>";
print_r($datosnivel2[$i]);
echo "</pre>";
}

echo "<br>Tenemos " . array_sum($cantidaddatosdentrodelarreglo) ." subafiliados en total en este nivel 2. <br>";

include('conexion/conexion-cerrar.php' );
}
?>

Ahora, si yo agrego el siguiente código, el script no funciona y me arroja un error fatal:
for($j = 0; $j < count($datosnivel2[$i]); ++$j) {
echo "Dentro del segundo for el valor de i=$i y el valor de j=$j;<br>";
$consulta2 = "SELECT IDAfiliado FROM DatosAfiliados WHERE IDPadrino=$datosnivel2[$i][$j][]";
$resultado2 = $conexion -> query($consulta2);
while($fila2 = $resultado2 -> fetch_array()) { //////LINEA 37 DEL ERROR
echo "Dentro del segundo while el valor de i=$i y el valor de j=$j;<br>";
$datosnivel3[$i][$j][] = $fila2["IDAfiliado"];
print_r($datosnivel3[$i][$j]);
}
}



ERROR:
PHP Fatal error: Call to a member function fetch_array() on a non-object in /home/globwsy/public_html/portal/hasta3nivel.php on line 37

Pueden ayudarme por favor???

Gracias

Por Mario Campos

2 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Jun 2017 02:46 pm
Eso que describes es un árbol. Lo puedes solucionar con recursividad. Es muy sencillo una vez que dominas la recursividad. En cualquier documentación medianamente seria sobre PHP padrás encontrar ayuda sobre procesos recursivos.

Por jpbringas

1 de clabLevel



Genero:Masculino  

Desarrollador web PHP

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.