2009-08-20 7 views
0

foreachまたはwhileループのいずれかで次のサンプルデータを使用するにはどうすればよいですか?PHPで質問の回答をプリントアウトするにはどうすればよいですか?

私は

$answers = pg_fetch_all ($result); 

サンプル・データしかし

[0]=> 
    array(3) { 
    ["answer"]=> 
    string(7) "This is the answer" 
    ["username"]=> 
    string(5) "roope" 
    ["was_sent_at_time"]=> 
    string(26) "2009-08-20 23:30:46.200017" 
    } 
    --- cut --- 
    [3]=> 
    array(3) { 
    ["answer"]=> 
    --- cut ---- 

を実行することにより、次のサンプルデータを取得し、私はそれがI以来、データを抽出するための最良の方法であるかどうかを確認していません上記の形式からデータを抽出する方法がわかりません。私は失敗した走った:

1.

foreach ($answers as $answers[] => $answers['answer']){ 
     echo $answers['answer'] 
     echo $answers['username']; 
     echo $answers['was_sent_at_time']; 
} 

#1は、私は、リソースからデータを持っているだけの方法です。 私は#2方法をうまく試してみました。

2.

while ($answer_row = pg_fetch_array($result)) { 
    echo $answer_row['username']; 
    echo $answer_row['was_sent_at_time']; 
    echo $answer_real['answer']; 
} 

サンプルデータがそれぞれの答えは、対応するフィールドを持っていることを私に示しているので、この方法では、驚くべきことである出力として何も与えません。あなたは、二次元アレイを有する

+0

ありがとうございました! –

答えて

3

これは、あなたが...違いは、foreachループは、基本的には、配列の各要素を割り当てていることであることを

while ($answer_row = pg_fetch_array($result, NULL, PGSQL_ASSOC)) { 
    echo $answer_row['username']; 
    echo $answer_row['was_sent_at_time']; 
    echo $answer_row['answer']; 
} 

注意をforeachループ

foreach ($answers as $answer){ 
    echo $answer['answer'] 
    echo $answer['username']; 
    echo $answer['was_sent_at_time']; 
} 

とwhileループを行う方法です順序の別の変数。それは

for($i=0;$i<count($arr);$i++) { 
    $value = $arr[$i]; 
} 

のラッパーのようなものだし、またそのpg_fetch_arrayは、デフォルトで連想配列を返しません。そのためにはPGSQL_ASSOCパラメータを渡す必要があります。

1
foreach($answers as $quess) { 
    $an = $quess['answer']; 
    $name = $quess['username']; 
    $time = $quess['was_sent_at_time']; 
} 


配列[0]アレイ
アレイを保持する[0] [0]の値
配列の配列[0] [1]値の配列であります
......

したがって、foreachは最初の(またはコンテナ)配列をループします。 foreach内の各サブ値は配列(配列[0] [0]、配列[0] [1]など)でもあります。したがって、個々の値にアクセスするには、配列形式でアクセスする必要があります。array ['index'] = value。

+0

'quess'とは何ですか? –

+0

$ quessは、$ answerの各値の一時的な値です。これはforeachの働きです.xの各値に対して、コピーは一時的な値yになります。 –

2

あなたはキー(つまり回答番号)に興味がないので、foreach引数の第2部分の前半を省略できます。ここでは#1を行うには正しい方法です:それは第三のオプションの引数は、列名ではなく、位置をインデックスデータを取り戻すために設定する必要があるため

foreach ($answers as $answer) { 
    echo $answer['answer']; 
    echo $answer['username']; 
    echo $answer['was_sent_at_time']; 
} 

pg_fetch_arrayはトリッキーな獣です。 2番目の引数もオプションであるため、3番目の引数を追加できるようにする必要があります。第二引数は、行のインデックスであるので、それをインデックス変数与える:

$i = 0; 
while ($answer_row = pg_fetch_array($result, $i ++, PGSQL_ASSOC)) { 
    echo $answer_row['username']; 
    echo $answer_row['was_sent_at_time']; 
    echo $answer_row['answer']; 
} 

をすることを試してみて、それが動作するかどうかを確認。

関連する問題