【问题标题】:PHP For Loop adding extra row at end of loopPHP For Loop 在循环结束时添加额外的行
【发布时间】:2022-11-24 04:07:22
【问题描述】:

我从 2 个不同的 WordPress 表中提取数据并循环获取适当的数据到表行中。

$tid = $_POST['pqrnum']; //get estimate number
$results = $wpdb->get_results('SELECT * FROM eqnum WHERE id='.$tid); //getting estimate data
$pArray = explode(',', $results[0]->pnum); //creating array of product numbers in estimate
$ptable = "<table>"; //create table
$presults = $wpdb->get_results('SELECT * FROM eparts'); //getting product data
$pres= count($presults); //products array count
for($l = 0; $l <=count($pArray); $l++){  //loop through each product in the array
    $item = $pArray[$l]; //getting item number start 0
    $titem = $item + 1; //adding 1 to $item without disturbing it because product array starts at 1
    for ($x = 1; $x <= $pres; $x++) { //looping through product array
       if($titem == $presults[$x-1]->id){ // if estimate item = product number
         $ptable .= "<tr><td>item num ". $titem ." presults id ".$presults[$x-1]->id." presults name ".$presults[$x-1]->name."</td></tr>";
       }
    }
}
$ptable .= "</table>";

不知道为什么,但它似乎打印了额外的一行,在这个特定的例子中应该有 3 行,但这是响应:

项目编号 1 个结果 ID 1 个结果名称 备份警报

item num 10 presults id 10 presults name 机油滤清器

item num 11 结果 id 11 结果名称 Spark Plug

项目编号 1 个结果 ID 1 个结果名称 备份警报

如您所见,第一行和最后一行是相同的,它应该只是前 3 行,而不是前 4 行。 只是想确定为什么额外的行,任何帮助表示赞赏。

【问题讨论】:

  • count() 返回数组中的项数,但您从零开始计数,因此您需要 &lt; 而不是 &lt;=。教科书差一个错误。 :)
  • 虽然与您的问题无关,但 WordPress 的 wpdb 类具有辅助方法来保护您的代码免受注入。根据您提供的内容,您可以使用 $wpdb-&gt;get_var($wpdb-&gt;prepare("SELECT pnum FROM eqnum WHERE id=%d", $tid)); 安全地获取该单列值。
  • 总的来说,我似乎完全看不出你为什么关心循环索引?对于$results,它实际上是任意的(尽管是从零开始的),因为它是即时完成的,而且您的所有产品无论如何都有 ID,所以这无关紧要。据我所知,您实际上应该可以使用 foreach
  • 此外,您不需要在第二次查询中获取所有产品,您可以只获取与您的第一个查询相关的产品,此代码与一些保护一起执行:3v4l.org/YrObo
  • 扩展@ChrisHaas 的评论,如果您有一个索引数组并且确实需要索引,您可能会发现像foreach ($items as $index =&gt; $item) { ... } 这样的操作不太容易出错。 (并且不会在每次迭代时产生调用 count() 的开销。)

标签: php wordpress for-loop


【解决方案1】:

亚历克斯使用 < 而不是 <= 得到了答案,我想我之前已经尝试过了,但非常感谢。

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多