Здесь у меня есть цикл, содержащий 5 имен в строке <table>
. Эта table
должна быть ранжированием, где первый столбец отображает строку имен участников, а остальные 10 столбцов должны отображать оценки.
Для пустых столбцов, где я хочу добавить номера баллов, я хотел бы создать array
для каждого участника и сделать его петлей через <td>
. В array
есть 10 чисел, где каждый номер должен отображаться на каждом пустом <td>
влево.
//Names $names = array("Mike", "Kyle", "Johnny", "Will", "Vasques"); //scores values for each name $scores = array( "Mike" => array(04, 03, 00, 07, 04, 07, 00, 01, 00, 07, 04), "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) ); //start loop for rows for($x=0; $x<count($names); $x++) { echo "<tr>"; //column for the names echo "<td>$names[$x]</td>"; //loop for columns where the score should be displayed for($td=2; $td<=10; $td++) { echo "<td></td>"; } echo "</tr>"; }
Он должен выглядеть примерно так:
Mike 04 03 00 07 04 07 00 01 00 07 04 Kyle 07 01 00 03 04 01 00 07 03 04 04 Johnny 03 01 00 03 04 07 00 01 00 07 07
и так далее…
Попробуй это
echo "<table>"; foreach($scores as $key=>$value) { echo "<tr>"; echo "<td>$key</td>"; for($x=0; $x<count($value); $x++) { echo "<td>".sprintf('%02d', $value[$x])."</td>"; } echo "</tr>"; } echo "</table>";
Пример полного просмотра кода
<?php //Names $names = array("Mike", "Kyle", "Johnny", "Will", "Vasques"); //scores values for each name $scores = array( "Mike" => array(04, 03, 00, '-', '-', '-', '-', '-', '-', 07, 04), "Kyle" => array(07, 01, 00, 03, 04, 01, 00, 07, 03, 04, 04), "Johnny" => array(07, 07, 00, 03, 00, 04, 00, 01, 01, 04, 03), "Will" => array(03, 04, 00, 03, 04, 07, 00, 01, 00, 07, 04), "Vasques" => array(03, 01, 00, 03, 04, 07, 00, 01, 00, 07, 07) ); echo "<table>"; foreach($scores as $key=>$value) { echo "<tr>"; echo "<td>$key</td>"; for($x=0; $x<count($value); $x++) { if (is_numeric($value[$x])) { echo "<td>".sprintf('%02d', $value[$x])."</td>"; } else { echo "<td>". $value[$x]."</td>"; } } echo "</tr>"; } echo "</table>";
Вывод
Mike 04 03 00 - - - - - - 07 04 Kyle 07 01 00 03 04 01 00 07 03 04 04 Johnny 07 07 00 03 00 04 00 01 01 04 03 Will 03 04 00 03 04 07 00 01 00 07 04 Vasques 03 01 00 03 04 07 00 01 00 07 07
Вам не нужен массив $names
, вы можете просто вывести его как ключ массива первого уровня. Вот пример использования foreach()
вместо числовых for()
циклов для более чистого кода:
foreach($scores as $name => $values) { echo '<tr><td>' . $name . '</td>' . PHP_EOL; foreach($values as $val) { echo '<td>' . $val . '</td>' . PHP_EOL; } echo '</tr>' . PHP_EOL; }
<?php foreach($names as $names) { echo "<tr>"; echo "<td>$names</td>"; foreach($scores[$names] as $nmscore) { echo "<td>$nmscore</td>"; } echo "</tr>"; }
?>
<?php foreach($names as $name) { echo "<tr>"; echo "<td>$name</td>"; foreach($scores[$name] as $nmscore) { echo "<td>$nmscore</td>"; } echo "</tr>"; } ?>