2

次の結果を取得する次のコードがあります。

$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 という名前を 1 回だけ表示しますか? MYSQl クエリで区別されます。

これは可能ですか?

4

1 に答える 1

0

連想配列を中間変数として使用することをお勧めします。

groups[groupName][] = item;

したがって、アイテムはグループ名、つまり例では「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 ){       
      ...
   }
}
于 2012-11-10T13:10:23.110 に答える