Cita:
Iniciado por Briss
Gracias mira hice algunos cambios
Código PHP:
<?php do { ?>
<?
echo "<th width=30 colspan=$total>";
echo htmlentities($row_categorias['nombre']);
echo "</th>";
for ($i = 1; $i < 3; $i++) {
print "<tr><th>$i</th></tr>";
}
echo "<tr>
<td ><p>CABECERA DOS</p></td>
</tr>
<tr>
<td ><p>1</p></td>
<td ><p>2</p></td>
</tr>";
?>
<?php
} while ($row_categorias= mysql_fetch_assoc($categorias));
?>
PERO mi imagen sale asi
https://ibb.co/hMY1DfG
Y deberia ser asi
https://ibb.co/VmLxQnp
Los <tr> al sacarlos del do while quedan horizontales no sè que debo mover

La solucion puede que paresca mas complicada pero en realidad es mas Simple de lo que parece, Solo debes entender como funciona el Proceso de PHP
puedes Tener Categorias, 1 a la N, eso hara que cresca Horizontalmente, y tu HTML, tendrias que generar Primero las Cabeceras y su tamaño COLSPAN, y una vez termines las cabeceras IR por los datos, haber te ilustro con este codigo.
se diferencia un poco de tu ejemplo de tabla, pero para obtener el mismo resultado de tu tabla de ejemplo, solo has tus cambios, pero el proceso seria el Mismo
Código PHP:
<?php
$datos_mysql=array(
array("nombre"=>'Categoria A'),
array("nombre"=>'Categoria B'),
array("nombre"=>'Categoria C'),
);
//Ignora esta funcion es para ilustrarte el WHILE
function simular_mysql_fetch_assoc(&$categorias){
static $pointer=0;
if(isset($GLOBALS['datos_mysql'][$pointer])){
return $GLOBALS['datos_mysql'][$pointer++];
}
return false;
}
//Esta funcion solo es un ejemplo para obtener los datos que van acompañando la categoria
function devuelve_elemenos_de_X_categoria($categoria_nombre){
$n_campos = rand(2,5);
$datos_array=array();//suponiendo que proviene de una consulta MYSQL
for($i=0;$i<$n_campos;$i++){
$datos_array[$i] = rand(1,9);
}
return $datos_array;
}
//Creamos una Variable ARRAY que contendra los Campos debajo de cada Categoria
$campos_de_categorias=array();//Cada elemento del array, sera un TD de la TABLA
echo '<table border="1" cellspacing="0" cellpadding="0">';
//Primero Obtenemos Los 1 a la N campos de cada Categoria y
//luego solo mostramos el Nombre de la categoria con su Colspan COrrespondiente
echo ' <tr>';//Iniciamos la FILA de las categorias
while($row_categorias = simular_mysql_fetch_assoc($categorias)){
//Primero obtenemos los elementos de cada categoria para asi tener el COLSPAN
$N_COLSPAN = 0;
$campos_de_categoria = devuelve_elemenos_de_X_categoria($row_categorias['nombre']);
foreach ($campos_de_categoria as $key => $value) {
//llenamos nuestro Contenedor de Categorias $campos_de_categorias
$campos_de_categorias[] = $value;
$N_COLSPAN = $N_COLSPAN +1;//O tambien $N_COLSPAN++;
}
//$N_COLSPAN = $N_COLSPAN == 0?1:$N_COLSPAN;
//No puede haber un Colspan 0, por que el hecho de haya una categoria eso es 1 celda si o si
if($N_COLSPAN==0){
$N_COLSPAN=1;
$campos_de_categorias[]='';// un Campo Vacio
}
echo ' <td width="94" colspan="'.$N_COLSPAN.'" valign="top"><p>'. $row_categorias['nombre'] .'</p></td>';
}
echo ' </tr>';
echo ' <tr>';//Iniciamos la FILA de los campos de categorias
foreach ($campos_de_categorias as $td) {
//Un td que es dinamico no deberia tener un WIDTH
echo ' <td valign="top"><p>'.$td.'</p></td>';
}
echo ' </tr>';
echo ' <tr>';
echo ' <th width="94" colspan="'.count($campos_de_categorias). '" valign="top"><p> Piesito de tabla</p></th>';
echo ' </tr>';
echo '</table>';
puedes probar ese codigo en este sitio WEB para que veas el resultado
http://phptester.net