PHP skip for loop Iteration based on a query result set

PHP skip for loop Iteration based on a query result set

例如,我有一个来自 MySQL 查询的结果集,该查询产生了以下值:3,5,10,11 等等...

我想遍历 PHP 中的 for 循环,但排除任何等于我的 MySQL 查询结果中的任何数字的迭代。

目前我有:

for($i = 1; $i <= $num_rows; $i++)
{
 if($i == 3 or $i == 5)
 {
   continue;
 }
 //Rest of loop...

你们都会意识到对这些值进行硬编码非常耗时且效率不高。如果有人能提供帮助,将不胜感激。

如果您的查询结果以数组形式返回,您可以使用 if(in_array($i, $results)) 根据结果检查 $i

如果您可以自动收集您当前正在硬编码的那些值,则可以使用 in_array($search, $array[, $strict])

像这样:

$bypass = array(3, 5);

for($i = 1; $i <= $num_rows; $i++)
{
    if( in_array($i, $bypass) )
    {
        continue;
    }

    // rest of the loop
}

PS :我更喜欢 "Dont Panic" 答案,它不会使用太多循环。 (in_array 将遍历数组以找到您的值)。查看他的回答:

在获取查询结果时将您的值添加到数组中。例如,我在这里使用了 PDO,但您应该能够使其适应您正在使用的任何数据库扩展:

while ($row = $stmt->fetchObject()) {
    $exclude[$row->value] = true;
    // whatever else you're doing with the query results
}

如果您将这些值用作要跳过的事物数组中的键,则在 for 循环中检查它们应该比使用 in_array.

更有效
for($i = 1; $i <= $num_rows; $i++) {
    if (isset($exclude[$i])) continue;
    // rest of loop