如果是真的使用foreach循环,否则使用while

时间:2012-12-26 14:04:49

标签: php mysql database loops

我正在尝试使用类似这样的东西将MySQL while循环链接到foreach循环:

if($something == true){
  foreach($array as $arr){
} else {
  while($row = mysql_fetch_array($mysql_query)){
}
  // loop instructions
}

看起来很错,我知道但是你看到我想要做什么?..如果$something为真,我想从数组中获取数据,否则从数据库中获取数据

我有另一个解决方案想法,它可以手动匹配数组$mysql_query如何工作,所以我只能使用它们while,如下所示:

if($something == true){
  $mysql_query = array("username" => "$_GET['username']", "password" => "$_GET['password']");
} else {
  $mysql_query = mysql_query("SELECT * FROM users WHERE usern......");
}

while($row = mysql_fetch_array($mysql_query)){
...

这是第二种方法,但它看起来也不对,因为第一个数组是正常的,我想匹配正常数组mysql_query如何构建它以便它可以适应while循环

P.S。 :我不要想重复写循环指令,我希望它们只能像我上面提到的一样工作

5 个答案:

答案 0 :(得分:2)

将您的处理功能化为一个功能:

function process_data($data) {
    // do stuff
}


if($something){
    foreach($array as $arr){
        process_data($arr);
    }
} else {
    while($row = mysql_fetch_array($mysql_query)){
        process_data($row);
    }
}

答案 1 :(得分:1)

此处的其他答案都很好,但您最好只是为了确保$array是一个有效的数组而不管something ......怎么样

if (!something){
    $array = array();
    while($row=mysql_fetch_array($mysql_query)) {$array[] = $row;}
}

foreach($array as $arr){
   // do work
}

答案 2 :(得分:0)

如果你扩大了你所解释的范围,你可能会得到一个更好的答案。不知道什么是什么,数据是什么,加上最终的目标,那么很难说你应该使用什么样的结构。

在我看来,如果循环中的代码相同,你可以通过使用函数来实现这一点。像这样:

if($something == true)
{
    foreach($array as $arr)
    {
        doWork($arr);
    }
}
else
{
     while($row = mysql_fetch_array($mysql_query))
     {
         doWork($row);
     }
}

function doWork($arr)
{
 //...
}

答案 3 :(得分:-1)

你不能在这样的循环中嵌套循环指令。你需要在IF语句中完全有两个独立的循环。

if($something == true){
  foreach($array as $arr){
     // do work
  }
} else {
  while($row = mysql_fetch_array($mysql_query)){
    // do work
  }
}

答案 4 :(得分:-1)

也许你可以从这个角度来看待。请注意,此代码使用mysql_fetch_assoc()而不是mysql_fetch_array()。尝试这两个函数并使用var_dump()查看结果行。您将看到mysql_fetch_array()的数据量是其两倍。你可能想要那样,但可能不是。

if ($something !== true)
{
    $array = array();
    while($row = mysql_fetch_assoc($mysql_query_result_resource))
    {
        $array[] = $row;
    }
}
foreach($array as $arr)
{
    /* PROCESS */
}