[PHP-users 3664] Re: pg_fetch_rowと配列の効率的な使い方

Osamu Shigematsu php-users@php.gr.jp
Mon, 19 Nov 2001 16:43:42 +0900


重松です。

ざっと見た感じ、

>      do {
>        @$row = pg_Fetch_Row ($result, $i);
>        if ($row) {
>          for($k=0;$k<20;$k++) { $sRes .= $row[$k];}
>          $sRes .= '<BR>';
>          $i++;
>        }
>      } while ($row);

の部分がキモでしょうけど、

while(@$row = pg_fetch_row($result,$i++))
  $sRes .= implode('<br />',$row);

とすれば良いのではないでしょうかね。

当然 select で引っ張ってくる時に余計なデータがあって困るなら
* でなくて、順番に欲しいカラムを列挙すればいいし、
普通は、こういう速度よりも、開発速度、保守のしやすさから、
pg_fetch_array() を使うと思いますし、さらにいえば、
DB に依存しないように抽象化した class library を使うのが普通だと思います。

PHPLIB を使う場合には、

if(!$db->query($sql))
	die($sql);

$sRes = "<table><thead><th....." // ヘッダ
for(i = 1; $db->next_recod(); ++$i){
	extract($db->Record()); // 各カラム名の変数に展開する
	$sRes .= "<tr><td>$i</td><td>$column1</td><td>$column2</td></tr>";
}
$sRes .= "</tbody></table>";

ってな感じですか。

# 私はもちろん、こんな HTML をそのまま埋めるようなコードは書きません。
# だって、HTML と PHP の両方を知っている人でないと、保守できませんから。

たとえば、意味のない後置の ++ 演算子だとか、複数回の $row の判定など、
ものすごく冗長だし、無駄が多い書き方を故意にしている気がしますが。

# 前にも書きましたが、$i++ は ++$i よりも低速ですから、ループのカウンタなどで
# 後置の ++ で加算するのは何の利益もないです。