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
例如,我有一个来自 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