【问题标题】:Using for loop to speed up PHP code typing使用 for 循环加速 PHP 代码输入
【发布时间】:2012-01-28 16:10:15
【问题描述】:

大家好,我一直在从 SQL 表中逐个提取行。两年前我编写了这段代码,并意识到它的效率非常低。我想通过键入一个简单的 for 循环来自动化编码来加快速度。

$maxRows_dd1 = 10;
$pageNum_dd1 = 0;
if (isset($_GET['pageNum_dd1'])) {
  $pageNum_dd1 = $_GET['pageNum_dd1'];
}
$startRow_dd1 = $pageNum_dd1 * $maxRows_dd1;

$maxRows_dd2 = 10;
$pageNum_dd2 = 1;
if (isset($_GET['pageNum_dd2'])) {
  $pageNum_dd2 = $_GET['pageNum_dd2'];
}
$startRow_dd2 = $pageNum_dd2 * $maxRows_dd2;

$maxRows_dd3 = 10;
$pageNum_dd3 = 2;
if (isset($_GET['pageNum_dd3'])) {
  $pageNum_dd3 = $_GET['pageNum_dd3'];
}
$startRow_dd3 = $pageNum_dd3 * $maxRows_dd3;

... dd4 到 dd99 介于两者之间!

$maxRows_dd100 = 10;
$pageNum_dd100 = 99;
if (isset($_GET['pageNum_dd99'])) {
  $pageNum_dd32 = $_GET['pageNum_dd99'];
}
$startRow_dd99 = $pageNum_dd99 * $maxRows_dd99; 

对应于:

mysql_select_db($database_rent, $rent);
$query_dd1 = "SELECT * FROM rent";
$query_limit_dd1 = sprintf("%s LIMIT %d, %d", $query_dd1, $startRow_dd1, $maxRows_dd1);
$dd1 = mysql_query($query_limit_dd1, $rent) or die(mysql_error());
$row_dd1 = mysql_fetch_assoc($dd1);

if (isset($_GET['totalRows_dd1'])) {
  $totalRows_dd1 = $_GET['totalRows_dd1'];
} else {
  $all_dd1 = mysql_query($query_dd1);
  $totalRows_dd1 = mysql_num_rows($all_dd1);
}
$totalPages_dd1 = ceil($totalRows_dd1/$maxRows_dd1)-1;

mysql_select_db($database_rent, $rent);
$query_dd2 = "SELECT * FROM rent";
$query_limit_dd2 = sprintf("%s LIMIT %d, %d", $query_dd2, $startRow_dd2, $maxRows_dd2);
$dd2 = mysql_query($query_limit_dd2, $rent) or die(mysql_error());
$row_dd2 = mysql_fetch_assoc($dd2);

if (isset($_GET['totalRows_dd2'])) {
  $totalRows_dd2 = $_GET['totalRows_dd2'];
} else {
  $all_dd2 = mysql_query($query_dd2);
  $totalRows_dd2 = mysql_num_rows($all_dd2);
}
$totalPages_dd2 = ceil($totalRows_dd2/$maxRows_dd2)-1;

mysql_select_db($database_rent, $rent);
$query_dd3 = "SELECT * FROM rent";
$query_limit_dd3 = sprintf("%s LIMIT %d, %d", $query_dd3, $startRow_dd3, $maxRows_dd3);
$dd3 = mysql_query($query_limit_dd3, $rent) or die(mysql_error());
$row_dd3 = mysql_fetch_assoc($dd3);

if (isset($_GET['totalRows_dd3'])) {
  $totalRows_dd3 = $_GET['totalRows_dd3'];
} else {
  $all_dd3 = mysql_query($query_dd3);
  $totalRows_dd3 = mysql_num_rows($all_dd3);
}
$totalPages_dd3 = ceil($totalRows_dd3/$maxRows_dd3)-1;

...一直到dd100!!!

我将如何使用 for 循环来加快输入从 dd1 到 dd100 的每个代码块的所有这些代码?

【问题讨论】:

  • 我的经理让我更新他的系统,我刚刚意识到尝试添加 100 个 dd 实例会浪费多少时间!
  • 您实际上对从数据库中检索到的这些数据做了什么?将其显示在页面或其他内容上?为什么你需要这些单独的结果?不能只查询一次数据库吗?
  • @DaveRandom - 数据在表格中逐行显示。每行只能包含表中的 10 个值。
  • @methuselah 你能展示你用来生成表格的代码吗?
  • @DaveRandom: codepad.org/Mv1N4ORj

标签: php loops for-loop


【解决方案1】:

了解arraysfor() 循环。

【讨论】:

    【解决方案2】:

    这是一个更有效的代码,可以完全按照您上面的操作:

    <?php
    
      // You only need to do these once as they are the same throughout
      mysql_select_db($database_rent, $rent);
      $maxRows = 10;
      // This code gets the total number of rows in the database
      $totalRowsAll = mysql_fetch_assoc(mysql_query("SELECT count(*) AS total FROM rent", $rent));
      $totalRowsAll = (int) $totalRowsAll['total'];
    
    ?>
    <div class="tab_container">
        <div id="tab1" class="tab_content">
          <table width="100%" border="0" cellspacing="5" cellpadding="5" id="1">
    <?php
    
      for ($i = 0; $i < 100; $i++) {
    
        // Calcluate value for this iteration and query database
        $pageNum = (isset($_GET['pageNum_dd'.($i + 1)])) ? (int) $_GET['pageNum_dd'.($i + 1)] : $i;
        $startRow = $pageNum * $maxRows;
        $query = "SELECT * FROM rent LIMIT $startRow, $maxRows";
        $result = mysql_query($query, $rent) or die(mysql_error($rent));
        $totalRows = (isset($_GET['totalRows_dd1'])) ? (int) $_GET['totalRows_dd1'] : $totalRowsAll;
        ${'totalPages_dd'.($i + 1)} = ceil($totalRows / $maxRows) - 1;
    
        // Now print this row
    ?>
            <tr height="100px" align="center">
    <?php
    
        while ($row = mysql_fetch_assoc($query)) {
    
    ?>
    
                <td style="background-color: <?php echo $row['colour']; ?>;" onclick="window.location='pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>'" onmouseover="this.style.cursor='pointer'"> 
                  <form action="pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>" method="post">
                    <input type="hidden" id="<?php echo $row['dNo']; ?>">
                    <input type="hidden" value="<?php echo $username; ?>">
                    <button type="submit" class="link" id="t<?php echo $row['dNo']; ?>">
                      <span><?php echo $row['dNo']; ?></span>
                    </button>
                  </form>
                </td>
    <?php
    
        } // End while
    
    ?>
            </tr>
    <?php
    
      } // End for
    
    ?>
          </table>
        </div>
    </div>
    

    ...然而

    我很确定这可以在一个查询中进行总结,以获得您需要的所有结果,这将更加高效并大大减少数据库负载。但是由于$_GET['pageNum_dd*']$_GET['totalPages_dd*'] 变量是在每行基础上使用的,我对此不是100% 确定的,而且如果不了解更多关于生成的内容,我无法弄清楚如何做到这一点。您需要检查这些可以传递的参数是否实际上是必要的/有用的。实际上,它们可能会导致行的长度不同,每行的单元格数量不相等 - 这可能不是您想要的。

    变量$totalPages_dd* 也是如此,它们在下面分配但从未在任何地方使用过。它们可能没有用,分配它们可能毫无意义。

    【讨论】:

    • 嘿,感谢您的帮助 - 我有 20 个标签,即 &lt;div id="tab1" class="tab_content"&gt;&lt;/div&gt; 每个标签有 10 x 5 行 - 代码能够输出吗?这是它应该是什么样子的图像(但一直到 951-1000)-i.imgur.com/JXM0d.jpg
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多