Autor Tema: PHP asociar lista de datos a una clave (listas dinámicas número datos variable)  (Leído 3232 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");
$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 //////////////////////////////////////////


?>
« Última modificación: 19 de Agosto 2015, 21:15 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2659
    • 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".