php mysql_fetch_array()没有按预期工作

时间:2015-08-31 05:41:33

标签: php

$result = mysql_query($strSql);
foreach($bestmatch_array as $restaurant)
        {   
            while($row = mysql_fetch_array($result))
            {   
                if($restaurant == $row[0])
                {
                    $value = $row[1];
                }
            }
        }

我要做的是根据$ bestmatch数组中存储的值对查询形成的数组进行排序。

我不知道我做错了什么,但第4行似乎只运行一次。请帮帮我们提前完成。

2 个答案:

答案 0 :(得分:1)

  

php mysql_fetch_array()未按预期工作

您的期望不对。

foreach($bestmatch_array as $restaurant)
        {   
            // This loop will only run for first iteration of your foreach.
            while($row = mysql_fetch_array($result))
            {

            }
            // everything has been fetched by now.
        }

这是一个逻辑错误的序列。

你希望你的内循环被反复调用,就像外循环运行一样多次,但是记录获取不能像那样工作。对于外循环的首次运行,将获取$ result中的所有行,因为在while循环之后没有重置计数器,这意味着在第一次运行之后,下一次运行将不再有行。

解决方案?首先从mysql中获取行,然后使用简单的in_array调用来检查您的数组中是否有该餐厅。

$result = mysql_query($strSql);
while($row = mysql_fetch_array($result))
{   
     $name=$row[0];
     if(in_array($name,$bestmatch_array))
        $value=$name;
}

答案 1 :(得分:0)

首先将查询结果存储在数组中:

$result = mysql_query($strSql);
$results_row = array();
while($row = mysql_fetch_array($result))
        {   
            $results_row[] = array($row[0],$row[1]);
        }

foreach($bestmatch_array as $restaurant)
    {   
        foreach ($results_row as $key => $value) 
          {
            if($restaurant == $results_row[$key][0])
            {
                $value = $results_row[$key][1];
            }
        }
    }