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");
$test2str_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