Я не проверял это, но оно должно работать. Это должно служить примером того, что должно быть сделано. Я попытался написать это, чтобы ограничить число используемых циклов foreach. Если бы я сначала переупорядочил данные, а затем выполнил дубли, мне понадобилось бы 4 цикла foreach. Преимущество этого метода заключается в том, что вам не нужно обновлять код, если добавлено больше столбцов, если все записи имеют одинаковое количество столбцов.
<?php
// Your list of records
$records = array(
array( "key1" => "value", "key2" => "value", "key3" => "value" ),
array( "key1" => "value", "key2" => "value", "key3" => "value" ),
array( "key1" => "value", "key2" => "value", "key3" => "value" )
);
// Create an array to store the values of each row based on number of columns in first value
$rows = array_fill( 0, count( $records[0] ), "" );
$keys = array_keys( $records[0] );
// Create a column for each record in it's respective row.
foreach( $records as $k => $record )
for( $i=0, $max=count( $rows ); $i < $max; $i++ )
$rows[ $i ] .= "<td>".$record[ $keys[ $i ] ]."</td>";
// Turn each row in our array into an html table row.
print "<tr>".implode( "</tr><tr>", $rows )."</tr>";
Вот тест кода: http://codepad.org/SSS8S2eU