Foros del Web » Programando para Internet » PHP »

Ayuda con PHP + XML

Estas en el tema de Ayuda con PHP + XML en el foro de PHP en Foros del Web. Hola a todos Tengo un script para mostrar gráficos a partir de un XML, uno de mis problemas (ya resuelto) es que obtengo los datos ...
  #1 (permalink)  
Antiguo 05/07/2010, 08:52
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 9 años, 5 meses
Puntos: 7
Ayuda con PHP + XML

Hola a todos

Tengo un script para mostrar gráficos a partir de un XML, uno de mis problemas (ya resuelto) es que obtengo los datos de un XML con diferente formato al requerido por el grafico, pero utilizando PHP y la clase DOMDocument pude crear el XML con la estructura requerida.

Mi duda es que a partir de la lectura de mi XML como creo un arreglo (u otra cosa) que almacene el listado de nombres (si el nombre aparece varias veces solo lo muestro una sola vez) mas la cantidad de ocurrencias de los mismos.

Algo asi: Jorge 2
Nelson 1
Felix 1


Código:
<?xml version="1.0" encoding="utf-8"?>
<data>
	<row name='Jorge' apellido='Perez' />
	<row name='Nelson' apellido='Gomez'/>
	<row name='Felix' apellido='Blanco'/>
	<row name='Jorge' apellido='Mesa'/>
</data>
Código PHP:
<?php
header
("Content-type: text/xml"); 
$dom = new DOMDocument();
$dom->load('test.xml');
$rows $dom->getElementsByTagName('row');
echo 
'<?xml version="1.0" encoding="UTF-8"?>';    
echo 
'<chart><title>Test</title><subtitle>';
echo 
$rows->length;
echo 
'</subtitle><name_value1>Nombres</name_value1><type>bars</type><header_height>80</header_height>';
echo 
'<chart_data>';
foreach(
$rows as $row){
    
$name    =    $row->getAttribute('name');
    
$value    =     $row->getAttribute('apellido');
    echo 
'<piece>';
    echo 
'<name>'.$name.'</name><value1>'.$value.'</value1>';
    echo 
'</piece>';
}
echo 
'</chart_data>';
echo 
'<colours><colour>0xaff500</colour><colour>0x3699a9</colour><colour>0xdaa000</colour><colour>336699</colour></colours>';
echo 
'</chart>';
?>
  #2 (permalink)  
Antiguo 05/07/2010, 09:45
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Ayuda con PHP + XML

Talvez puedas hacer algo asi:

Código PHP:

//creamos un array litral para simular la repeticion
$nombres = array("juan","pedro","maria","jose","juan","maria","carlos","luis");

$contar = array();

foreach(
$nombres as $nombre){ 

//como en los array no se repiten los indices
//un mismo nombre estara solo una vez 
//y se le sumara 1 por cada repeticion "nombre" => 2
$contar[$nombre] += 1



//$contar qudaria asi:
//$contar = array("juan" => 2,"pedro" => 1, ....

//y ahora se podria recorrer con un loop y crear el xml


//los mostramos literalmente solo para comprobar
echo "juan ".$contar['juan']."<br />";
echo 
"pedro ".$contar['pedro']."<br />";
echo 
"maria ".$contar['maria']."<br />";
echo 
"jose ".$contar['jose']."<br />";
echo 
"carlos ".$contar['carlos']."<br />";
echo 
"luis ".$contar['luis']."<br />"
  #3 (permalink)  
Antiguo 05/07/2010, 10:24
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 9 años, 5 meses
Puntos: 7
Respuesta: Ayuda con PHP + XML

Muchas gracias por responder me ha dado un norte para seguir trabajando pero me han surgidos otras dudas. por ejemplo

Ud. llama al arreglo por los nombres, pero en el caso que no conozca los nombres almacenados en el arreglo como lo llamaría??
  #4 (permalink)  
Antiguo 05/07/2010, 10:32
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Ayuda con PHP + XML

$contar seria el arreglo final, puede recorrerlo sin nececidad de saber los nombres:

Código PHP:

foreach($contar as $nombre => $cantidad){

//devolvera el nombre (indice) y la repeticion (valor)
echo $nombre ." => ".$cantidad."<br />";


  #5 (permalink)  
Antiguo 05/07/2010, 12:54
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 9 años, 5 meses
Puntos: 7
Respuesta: Ayuda con PHP + XML

Muchas gracias wiwi74 me has ayudado mucho. Una ultima cuestión y perdóname la ignorancia es que estoy comenzando en esto de la programación.

el código que me has dado me da bien el resultado pero me muestra estos errores proveniente de la linea en rojo
Código:
foreach($nombres as $nombre){  
	$contar[$nombre] += 1;  
	}

Notice: Undefined index: juan in C:\wamp\graf\test.php on line 9
Notice: Undefined index: pedro in C:\wamp\graf\test.php on line 9
Notice: Undefined index: maria in C:\wamp\graf\test.php on line 9
Notice: Undefined index: jose in C:\wamp\graf\test.php on line 9
Notice: Undefined index: carlos in C:\wamp\graf\test.php on line 9
Notice: Undefined index: luis in C:\wamp\graf\test.php on line 9
  #6 (permalink)  
Antiguo 05/07/2010, 13:12
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Ayuda con PHP + XML

Te paso lo mismo pero con el loop final agregado (el que te daba error):

Código PHP:

$nombres 
= array("juan","pedro","maria","jose","juan","maria","carlos","luis");

$contar = array();

foreach(
$nombres as $nombre){ 
$contar[$nombre] += 1


//el loop que te mostraba el error
foreach($contar as $nombre => $cantidad){ 
echo 
$nombre ." => ".$cantidad."<br />"
}  

/*
juan => 2
pedro => 1
maria => 2
jose => 1
carlos => 1
luis => 1
*/ 
Para que a ti te funcione primero debes crear un array con todo los nombres que vienen de db

Código PHP:

$contar 
= array();

foreach(
$rows as $row){ 
$name   =    $row->getAttribute('name'); 
$contar[$name] += 1


//ahora $contar seria un array con todo los nombres sin repetir. 
//Faltaria el apellido.... 
Espero que te sirva...

Última edición por wiwi74; 05/07/2010 a las 13:18
  #7 (permalink)  
Antiguo 05/07/2010, 15:09
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 9 años, 5 meses
Puntos: 7
De acuerdo Respuesta: Ayuda con PHP + XML

Muchisimas gracias wiwi74 por tu pasiencia, eres el mejor.
el codigo me quedo asi:

Código PHP:
<?php
header
("Content-type: text/xml"); 
$dom         =     new DOMDocument();
$dom->load('test.xml');
$rows         =     $dom->getElementsByTagName('row');
echo 
'<?xml version="1.0" encoding="UTF-8"?>';    
echo 
'<chart><title>Test</title><subtitle>';
echo 
$rows->length;
echo 
'</subtitle><name_value1>habitantes</name_value1><type>bars</type><header_height>80</header_height>';
echo 
'<chart_data>';
$contar     =     array();
foreach(
$rows as $row){
    
$name    =    $row->getAttribute('name');
    
$value    =     $row->getAttribute('value');
    
$contar[$name] += 1;
}
foreach(
$contar as $nombre => $cantidad){  
echo 
'<piece>';
echo 
'<name>'.$nombre.'</name><value1>'.$cantidad.'</value1>';
echo 
'</piece>';
}  
echo 
'</chart_data>';
echo 
'<colours><colour>0xaff500</colour><colour>0x3699a9</colour><colour>0xdaa000</colour><colour>336699</colour></colours>';
echo 
'</chart>';
?>
  #8 (permalink)  
Antiguo 05/07/2010, 18:47
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Ayuda con PHP + XML

Me alegro de que hayas podido adaptarlo.

Los son para ti

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:09.