1

我在我正在处理的代码中看到了以下内容:

foreach( $mysql_result as $row ) $site_id = $row->id;

$mysql_result 当然是 mysql_result,所以这个 foreach 等价于 while(mysql_fetch_row())

有时,已知结果只产生一行,但代码仍然有一个“foreach”,因此它给人的印象是循环通过许多行。

我尝试使用 each() 但不适用于此。

我知道我可以使用 mysql_fetch_row(),但是代码应该是独立于数据库的,所以我不能使用数据库特定的函数。在这种情况下是否有类似 each() 的东西,就像 foreach() 的第一次迭代一样?

PS:我目前为提高可读性所做的是将前面的例子变成这样:

foreach( $mysql_result as $row ) break;
$site_id = $row->id;

所以很明显 foreach 最多只会循环一次。

4

5 回答 5

3

我认为你想要的不是这个:

foreach( $mysql_result as $row ) $site_id = $row->id;

只是这个:

$site_id = $mysql_result[0]->id;
于 2009-08-17T20:50:27.333 回答
1

PS:我目前为提高可读性所做的是将前面的例子变成这样:

foreach( $mysql_result as $row ) 中断;

将其包装在一个函数中,以便清楚它得到一行(并且仍然是数据库独立的)

function fetch_single_row($result) 
{
  foreach( $mysql_result as $row ) break;
  return $row;
}

然后你的代码看起来像

$row = fetch_single_row($mysql_result);
$site_id = $row->id;

现在您不必怀疑所有奇怪的 foreach(..) 中断;整个代码中的语句。

于 2009-08-17T20:54:20.117 回答
0

如果你只想要一个结果,那么你不需要循环。

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$site_id = $row['id'];
于 2009-08-17T20:47:02.830 回答
0

你应该使用 do 循环

$i =0
do {
    $site_id = $mysql_result[$i++]->id;
} while ($i <= 0);
于 2009-08-17T20:56:35.090 回答
-1

这是你想要的吗?

if ( 1 == count( $mysql_result ) )
{
  $row = current( $mysql_result );

  // could probably also do this unless the array isn't zero-indexed
  // $row = $mysql_result[0];
}
于 2009-08-17T20:46:36.623 回答