我的代码有问题。我想达到的目标:
我有一个名为"比赛"的数据库表,包含有关足球装置的信息。现在我在这个表中有大约100个匹配,但很快就会有500+,所以为了不打击我的观众的头脑,我希望我的代码在每10个结果显示后执行换行(或者可能是一个新的表行,现在这并不重要,只是一些HTML标签)(因为每周有10个匹配)
下面是我的PHP代码:$sql = "SELECT * FROM matches ORDER BY matchid ASC";
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql));
$fixtures='';
while($row = mysqli_fetch_array( $query )) {
$fixturetime = $row["time"];
$fixturetime2 = $row["time"];
$fixtureid = $row["matchid"];
$fixtureround = $row["round"];
$hometeamid = $row["hometeamid"];
$awayteamid = $row["awayteamid"];
$fixturetime = strtotime( $fixturetime );
$fixturetime = date( 'd.m.Y', $fixturetime );
$fixturetime2 = strtotime( $fixturetime2 );
$fixturetime2 = date( 'H:i', $fixturetime2 );
$fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>';
}
下面是HTML输出:
<table>
<?php echo $fixtures; ?>
</table>
我已经尝试了一些在stackoverflow上显示的方法,但我无法正确地实现它们。因为我有点新PHP我问具体的解决方案。
谢谢。
试试;)
<?php
$sql = "SELECT * FROM matches ORDER BY matchid ASC";
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql));
$fixtures = '';
$i = 1;
while($row = mysqli_fetch_array($query)) {
$fixturetime = $row["time"];
$fixturetime2 = $row["time"];
$fixtureid = $row["matchid"];
$fixtureround = $row["round"];
$hometeamid = $row["hometeamid"];
$awayteamid = $row["awayteamid"];
$fixturetime = strtotime($fixturetime);
$fixturetime = date('d.m.Y', $fixturetime);
$fixturetime2 = strtotime($fixturetime2);
$fixturetime2 = date('H:i', $fixturetime2);
$fixtures .= '<tr><td><strong>' . $hometeamname . '</strong> v. <strong>' . $awayteamname . '</strong></td><td>' . $fixturetime . '</td><td>' . $fixturetime2 . '</td><td style="text-align: right;">' . $fixtureid . '</td><td>' . $i . '</td></tr>';
if(!($i % 10)){
$fixtures .= '<!-- break -->';
}
$i++;
}
我建议使用mod或%符号,这将返回除法的余数(因此n/10的余数将每10行为0)。
所以你需要一个计数器
$count = 1;
while( $row = ..... ){
if( $count % 10 == 0 ){
//do line break;
}
++$count;
}
php mod . php文档http://www.php.net/manual/en/internals2.opcodes.mod.php
你可能需要稍微调整一下,但这是最基本的
我建议用我能想到的最简单的方法。
$sql = "SELECT * FROM matches ORDER BY matchid ASC";
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql));
$fixtures='';
$counter = 0;
while($row = mysqli_fetch_array( $query )) {
$counter++;
$fixturetime = $row["time"];
$fixturetime2 = $row["time"];
$fixtureid = $row["matchid"];
$fixtureround = $row["round"];
$hometeamid = $row["hometeamid"];
$awayteamid = $row["awayteamid"];
$fixturetime = strtotime( $fixturetime );
$fixturetime = date( 'd.m.Y', $fixturetime );
$fixturetime2 = strtotime( $fixturetime2 );
$fixturetime2 = date( 'H:i', $fixturetime2 );
$fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>';
if (($counter % 10) == 0){ $fixtures .= '<br>'; }
}
这将在while循环每次迭代时给计数器加1。if语句将检查$counter与10是否有余数。如果有的话,它将继续运行而不需要换行。如果没有余数,意味着它是10的倍数,它将在末尾添加一个
。
希望这是你想要的!
您需要计算每一行。使用一个新的变量$i
,从0
开始,这个变量每循环增加1。然后检查该变量是否大于10。如果是添加更多的html到$fixtures
字符串,创建一个"空白"行。
如果发现空白行,也将$i
变量重置回0
$sql = "SELECT * FROM matches ORDER BY matchid ASC";
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql));
$fixtures='';
$i = 0; // <-- New variable
while($row = mysqli_fetch_array( $query )) {
$fixturetime = $row["time"];
$fixturetime2 = $row["time"];
$fixtureid = $row["matchid"];
$fixtureround = $row["round"];
$hometeamid = $row["hometeamid"];
$awayteamid = $row["awayteamid"];
$fixturetime = strtotime( $fixturetime );
$fixturetime = date( 'd.m.Y', $fixturetime );
$fixturetime2 = strtotime( $fixturetime2 );
$fixturetime2 = date( 'H:i', $fixturetime2 );
$fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>';
$i ++; // <-- add one
if ($i > 10) { // <-- If larger than 10 then do this statement
$fixtures.='<tr><td colspan=4>BREAK</td></tr>';
$i = 0; // <-- Oh and reset $i
}
}
我会查找使用OFFSET
和LIMIT
子句的分页解决方案。除此之外,您还可以将结果以10个为一组存储,然后在遍历组时应用输出逻辑:
$sql = "SELECT * FROM matches ORDER BY matchid ASC";
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql));
$fixtures = array(); // Each element will be an array of fixtures
$fixturesPerGroup = 10; // How many fixtures per group
$fixtureCount = 0; // Counter during the while loop iterating
$fixtureGroup = 0; // Which group to put the fixtures into
while($row = mysqli_fetch_array( $query )) {
$fixturetime = $row["time"];
$fixturetime2 = $row["time"];
$fixtureid = $row["matchid"];
$fixtureround = $row["round"];
$hometeamid = $row["hometeamid"];
$awayteamid = $row["awayteamid"];
$fixturetime = strtotime( $fixturetime );
$fixturetime = date( 'd.m.Y', $fixturetime );
$fixturetime2 = strtotime( $fixturetime2 );
$fixturetime2 = date( 'H:i', $fixturetime2 );
$fixtures[$fixtureGroup][] ='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>';
$fixtureCount++;
// Once we reach the fixturesPerGroup count, go to the next group
if (($fixtureCount % $fixturesPerGroup) == 0) {
$fixtureGroup++;
}
}
然后可以遍历组:
<table>
<?php
foreach ($fixtures as $fixturesInGroup) {
// Do logic here for displaying each group
echo implode('<br />', $fixturesInGroup);
}
?>
</table>