2009-08-20 29 views
0

如何通过foreachwhile循环使用以下示例数据?如何使用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 ---- 

但是得到下面的示例数据,我不知道它是否是提取数据的最佳方式,因为我我不确定如何从上述格式中提取数据。我不成功地跑了:

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

谢谢你的回答! – 2009-08-21 00:34:01

回答

3

这是你怎么做foreach循环

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

和while循环...

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循环基本上是一个数组分配每个元素另一个变量依次排列。这是一种包装

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中的每个子值也是一个数组(array [0] [0],array [0] [1]等)。因此,要访问各个值,您必须以数组样式访问它们:array ['index'] = value。

+0

什么是“quess”? – 2009-08-20 23:12:33

+0

$ quess是$ answer中每个值的临时值 - 这是foreach工作的方式 - 对于x中的每个值,它将临时值y放入一个副本。 – 2009-08-20 23:16:52

2

由于您对关键字(即答案编号)不感兴趣,因此可以省略foreach参数的第二部分的前半部分。这里是做#1的正确方法:

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

pg_fetch_array是一个棘手的野兽,因为它需要一个第三个可选参数设置为拿回被列名,而不是位置索引的数据。因为第二个参数也是可选的,所以必须给它一个值才能添加第三个参数。第二个参数是一个行索引,所以给它一个索引变量:

$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']; 
} 

试试看看它是否有效。