从简单的xml分组结果

时间:2012-11-10 13:01:49

标签: php xml

我有以下代码可以获得以下结果。

$file = 'http://mywebsite.com/test.xml?apikey=*******&API=TEST&limit=30';  
if(!$xml = simplexml_load_file($file))
   exit('Failed to open '.$file);   
$count = 0;
$max = 2;
foreach($xml->computer as $computer){       
   $count++;
   echo '<td class="">'. "<a href='computer.php?cgid=".$computer['group_id'].
      "'>".$computer['name']."</a>";'</td>';
   if($count >= $max){
      $count = 0;
      echo '</tr><tr>';
   }
}

结果

<computers>
<results totalPages="1" currentPage="1" totalResults="241"/>
   <computer id="14590" group_id="232" model_group="acer" name="Acer 1 GB" />
   <computer id="308382" group_id="232" model_group="acer" name="Acer 2 GB" />
   <computer id="308383" group_id="232" model_group="acer" name="Acer 3 GB" />
   <computer id="302719" group_id="232" model_group="acer" name="Acer 4 GB"/>
   <computer id="308384" group_id="232" model_group="acer" name="Acer 6 GB" />
   <computer id="308385" group_id="232" model_group="acer" name="Acer 8 GB" />
   <computer id="302720" group_id="232" model_group="acer" name="Acer 16 GB" />
   <computer id="308386" group_id="232" model_group="acer" name="Acer 32 GB" />
   <computer id="302715" group_id="232" model_group="acer" name="Acer 48 GB" />

我想要做的是对结果进行分组,目前我得到acer在多个按钮中重复的名称,当我拉结果时,我想要做的是为该组ID中的所有项目显示名称Acer一次? ,几乎像MYSQl查询中的不同。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我建议使用关联数组作为中间变量:

groups[groupName][] = item;

因此,项目将被添加到groupname索引的列表的末尾,即示例中的“Acer”。

代码要明确:

$file = 'http://mywebsite.com/test.xml?apikey=*******&API=TEST&limit=30';
if( !$xml = simplexml_load_file( $file )) {
   exit( "Failed to open '$file'" );
}
foreach( $xml->computer as $computer ){
   $index = $computer['model_group'];
   $computerGroups[$index]   = array();
   $computerGroups[$index][] = $computer;
}
foreach( $computerGroups as $groupname => $computers ){       
   foreach( $computer as $computers ){       
      ...
   }
}