1

私が取り組んでいるコードで、次のことを見てきました。

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

$mysql_result はもちろん mysql_result であるため、この foreach は while( mysql_fetch_row() ) と同等です。

場合によっては、結果が 1 行しか生成されないことがわかっている場合でも、コードにはまだ「foreach」があるため、多くの行をループしているような印象を与えます。

each() を使用してみましたが、これでは機能しません。

mysql_fetch_row() を使用できることはわかっていますが、コードは DB に依存しない必要があるため、DB 固有の関数は使用できません。この場合、 foreach() の最初の反復と同じように機能する each() のようなものはありますか?

PS: 読みやすくするために現在行っていることは、前の例を次のように変更することです。

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

したがって、 foreach が最大で 1 回だけループすることは明らかです。

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 ) break;

それを関数でラップして、1行を取得することが明確になるようにします(それでもdbに依存しません)

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

結果が 1 つだけ必要な場合は、ループする必要はありません。

$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 に答える