Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

257
Visualizações
Crear una tabla 'pivote' a partir de una matriz

Tengo una matriz que se ve así:

 Array ( Array ( [date] => 04/2021 [name] => Fred [value] => 12.00 ) Array ( [date] => 04/2021 [name] => Tom [value] => 160.00 ) Array ( [date] => 04/2021 [name] => Mike [value] => 9.00 ) Array ( [date] => 07/2021 [name] => Tony [value] => 200.00 ) Array ( [date] => 07/2021 [name] => Fred [value] => 43.00 ) Array ( [date] => 07/2021 [name] => Tom [value] => 114.00 ) Array ( [date] => 07/2021 [name] => Mike [value] => 28.00 ) )

Estoy tratando de obtener los datos en una tabla HTML simple donde el nombre va en el eje x, la fecha en el eje y y los valores donde se cruzan.

Por ejemplo:

 Fred Tom Mike Tony 04/2021 12.00 160.00 9.00 0 07/2021 43.00 114.00 28.00 200.00

No sé si estoy pensando demasiado en esto, pero no puedo hacer que esto funcione. Puedo hacer que el eje x funcione extrayendo los valores únicos para el nombre, pero luego, cuando se trata del eje y y las intersecciones, no puedo obtener el datos para mostrar cómo los necesito.

O termino con la repetición de columnas o una sola columna y así sucesivamente. Aquí es donde me he levantado, pero todavía me rasco la cabeza sobre cómo hacer esto:

 <?php $unique_names = array_unique(array_map(function($elem){ return $elem['name']; }, $data)); ?> <thead> <tr> <th>&nbsp;</th> <?php foreach ($unique_names as $i) { ?> <th><?php print $i;?></th> <?php } ?> </tr> </thead> <tbody> <?php foreach ($data as $row) { for ($i=0; $i<=count($unique_names);$i++) { if ($i==0) { print "<tr><td>".$row['date']."<td>"; } else { print "<td>".$row['value']."<td>"; } if ($i==count($unique_dates)) { print "</tr>"; } } } ?> </tbody>
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Primero, reorganice sus datos en una matriz que use la fecha como clave en el primer nivel y el nombre en el segundo. Recoge los nombres al mismo tiempo:

 $input = [ ['date' => '04/2021', 'name' => 'Fred', 'value' => '12.00'], ['date' => '04/2021', 'name' => 'Tom', 'value' => '160.00'], ['date' => '04/2021', 'name' => 'Mike', 'value' => '9.00'], ['date' => '07/2021', 'name' => 'Tony', 'value' => '200.00'], ['date' => '07/2021', 'name' => 'Fred', 'value' => '43.00'], ['date' => '07/2021', 'name' => 'Tom', 'value' => '114.00'], ['date' => '07/2021', 'name' => 'Mike', 'value' => '28.00'], ]; $data = $names = []; foreach($input as $item) { $data[$item['date']][$item['name']] = $item['value']; $names[] = $item['name']; } $names = array_unique($names);

Luego crea tu tabla. Recorra los nombres para crear primero la fila de encabezado. Luego, recorra la matriz de datos reorganizada (para crear una fila para cada fecha), y dentro de ese bucle sobre sus nombres nuevamente, si encuentra una entrada que coincida con el nombre en la matriz de datos, luego emita el valor, de lo contrario nada.

 <table> <tr> <th></th> <?php foreach($names as $name): ?> <th><?php echo $name; ?></th> <?php endforeach; ?> </tr> <?php foreach($data as $date => $userData): ?> <tr> <td><?php echo $date; ?></td> <?php foreach($names as $name): ?> <td><?php echo $userData[$name]??'-'; ?></td> <?php endforeach; ?> </tr> <?php endforeach; ?> </table>

Resultado:

 <table> <tr> <th></th> <th>Fred</th> <th>Tom</th> <th>Mike</th> <th>Tony</th> </tr> <tr> <td>04/2021</td> <td>12.00</td> <td>160.00</td> <td>9.00</td> <td>-</td> </tr> <tr> <td>07/2021</td> <td>43.00</td> <td>114.00</td> <td>28.00</td> <td>200.00</td> </tr> </table>

over 4 years ago · Santiago Trujillo Relatório

0

Aquí está tu respuesta, gran ejercicio. ingrese la descripción de la imagen aquí

 <html> <head> <style> table, th, td { border: 1px solid black; } </style> </head> <body> <?php $data = Array ( Array ( 'date' => '04/2021' ,'name' => 'Fred' ,'value' => '12.00' ), Array ( 'date' => '04/2021' ,'name' => 'Tom' ,'value' => '160.00' ), Array ( 'date' => '04/2021' ,'name' => 'Mike', 'value' => '9.00' ), Array ( 'date' => '07/2021' ,'name' => 'Tony' ,'value' => '200.00' ), Array ( 'date' => '07/2021' ,'name' => 'Fred' ,'value' => '43.00' ), Array ( 'date' => '07/2021' ,'name' => 'Tom' ,'value' => '114.00' ), Array ( 'date' => '07/2021' ,'name' => 'Mike' ,'value' => '28.00' ) ); foreach ($data as $key => $value) { $tmp[$value['name']][$value['date']] = $value; } $unique_names = array_unique(array_map(function($elem){ return $elem['name']; }, $data)); $unique_dates = array_unique(array_map(function($elem){ return $elem['date']; }, $data)); ?> <table> <thead> <tr> <th>Dates</th> <?php foreach ($unique_names as $i) { ?> <th><?php print $i;?></th> <?php } ?> </tr> </thead> <?php foreach ($unique_dates as $date) { echo "<tr>"; echo "<td>".$date."</td>"; foreach ($unique_names as $name) { if(array_key_exists($date,$tmp[$name])) echo "<td>".$tmp[$name][$date]['value']."</td>"; else echo "<td>0</td>"; } echo "</tr>"; } ?> <tbody> </tbody> </table> </body> </html>
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda