Autor Tema: PHP asociar lista de datos a una clave (listas dinámicas número datos variable)  (Leído 4453 veces)

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
Estoy haciendo un programa para hacer web scrapping para obtener el texto que aparece en cierta pagina, ya pude obtener el texto y acomodarlo conforme a su seccion y publicacion, el problema es como decirle que cierta publicacion pertenece a cierta seccion

En la imagen los que estan encerrados en amarillo representan las secciones y los de verde son las publicaciones, ya estan ordenadas, pero quiero saber como hacerle para decirle que esas publicaciones pertenecen a cierta seccion



Aqui esta el codigo
Código: [Seleccionar]
<?php	$html = file_get_contents("http://dof.gob.mx/index.php?year=2015&month=07&day=27");	file_put_contents('dof.html',$html);		$xml = new DomDocument();		@$xml->loadHTML($html);	$xml->normalizeDocument();	$xpath = new DOMXPath($xml);		/////////////////SECCIONES/////////////////////////		$titulos = $xpath->query('//td[@class="subtitle_azul"]');		$tituloSecciones= new ArrayObject();	$codigoSecciones = new ArrayObject();		foreach($titulos as $item){		// print_r($item);		$tituloSecciones -> append(trim($item->textContent));		foreach(($item->getElementsByTagName("a")) as $new){			$atributo = $new->getAttribute("href");			// print_r($atributo);			$arr = explode("=", $atributo);			$codigoSecciones -> append($arr[1]);			// echo $arr[1];		}			} 		$final = new ArrayObject();		for($i = 0;$i < count($tituloSecciones); $i ++){		$final -> append(array($codigoSecciones[$i] => $tituloSecciones[$i]));	}		// var_dump($titulo);			////////////////PUBLICACIONES/////////////////	$titulo = array();	$tituloPublicaciones= new ArrayObject();	$codigoPublicaciones= new ArrayObject();		$enlaces = $xpath -> query('//a[@class="enlaces"]');	// print_r($enlaces);	foreach($enlaces as $item){		$test = $item -> getAttribute("href");		$test2= str_replace('&' , '=',$test);		$explo = explode("=", $test2);		@$codigoPublicaciones -> append($explo[1]);				$tituloPublicaciones -> append(trim($item -> textContent));	}		//////////////////// CICLO PARA ORDENAR //////////////////////////		$maximo = count($codigoSecciones) - 1;		for($a = 0; $a < count($codigoSecciones) ; $a++){		for($b = 0; $b < count($codigoPublicaciones) - 1; $b++){			if($a == $maximo){				if($codigoPublicaciones[$b] > $codigoSecciones[$maximo]){					$final[$a][] = array($tituloPublicaciones[$b]);				}			}			else{				if($codigoPublicaciones[$b] > $codigoSecciones[$a] and $codigoPublicaciones[$b] < $codigoSecciones[$a + 1]){					$final[$a][] = array($tituloPublicaciones[$b]);				}			}		}	}		// $final[0][] = array($tituloPublicaciones[0]); /* asi da */		// var_dump($final[0][$codigoPublicaciones[0]]);	var_dump($final);		////////////////////// CICLO PARA ORDENAR LAS PUBLICACIONES EN SU SECCION //////////////////////////////////////////		?>
« Última modificación: 19 de Agosto 2015, 21:15 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2664
    • Ver Perfil
Hola, por lo que he entendido tienes datos y quieres establecer relaciones entre ellos, en este caso de pertenencia. Eso se puede hacer de diferentes maneras:


CON BASE DE DATOS

- Creas una base de datos con una tabla denominada secciones con clave primaria id_secciones

- En otra tabla denominada secciones_publicaciones estableces como clave primaria id_secciones_publicaciones y como clave foránea id_secciones. Cada fila representará una publicación indicando cuál es su sección asociada.


CON PROGRAMACIÓN ORIENTADA A OBJETOS

Creas una clase denominada Sección que tenga como atributo lo que sea necesario y una lista o array de publicaciones. Necesitarás un método para añadir publicaciones.

Creas otra clase denominada Publicación con los atributos que deba llevar una publicación.

A partir de aquí puedes crear los objetos Seccion que te sean necesario, y cada objeto llevar asociados las publicaciones que sean necesarias.

Ejemplo de una clase php:

Código: [Seleccionar]
// clase base con propiedades y métodos miembro
class Verdura {

   var $comestible;
   var $color;

   function Verdura($comestible, $color="verde")
   {
       $this->comestible = $comestible;
       $this->color = $color;
   }

   function es_comestible()
   {
       return $this->comestible;
   }

   function qué_color()
   {
       return $this->color;
   }
   
} // fin de la clase Verdura


CON ARRAYS

No te lo recomiendo porque es menos limpio y puede generar problemas, pero podrías crear un array:


$seccionesConPublicaciones = array(

                                array('seccion' => '1001', 'publicaciones' => '606,607,608'),

                                array('seccion' => '1002', 'publicaciones' => '121,333,555,999'),

                                .

                                .

);

Aquí $seccionesConPublicaciones[0] ['seccion'] = '1001'

$seccionesConPublicaciones[0] ['publicaciones'] = '606,607,608'

La lista de publicaciones sería una cadena de texto que podrías dividir y extraer usando un explode sobre la cadena usando como caracter separador la coma.



OTRAS FORMAS

Hay más formas de crear asociaciones de datos


Salu2

5378453

  • Principiante
  • **
  • Mensajes: 56
    • Ver Perfil
    • Mugiwara no Fansub
Gracias por tu ayuda, orita intentare hacerlo para ver si me queda
« Última modificación: 20 de Agosto 2015, 11:45 por Ogramar »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".