Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 5378453 en 18 de Agosto 2015, 02:26

Título: PHP asociar lista de datos a una clave (listas dinámicas número datos variable)
Publicado por: 5378453 en 18 de Agosto 2015, 02:26
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

(https://lh3.googleusercontent.com/-AKoQ2PcDGjE/VdJ7Dou7_3I/AAAAAAAAAf0/z_Kl53XC-ZM/s912-Ic42/titulos%252520y%252520secciones.png)

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 //////////////////////////////////////////		?>
Título: Re:PHP asociar lista de datos a una clave (listas dinámicas número datos variable)
Publicado por: Ogramar en 19 de Agosto 2015, 21:16
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
Título: Re:PHP asociar lista de datos a una clave (listas dinámicas número datos variable)
Publicado por: 5378453 en 19 de Agosto 2015, 23:04
Gracias por tu ayuda, orita intentare hacerlo para ver si me queda