如何用PHP打印出问题的答案?

时间:2009-08-20 23:06:25

标签: php postgresql foreach while-loop

如何使用foreachwhile循环使用以下示例数据?

我通过运行

获得以下示例数据
$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 ----

但是,我不确定这是否是提取数据的最佳方式,因为我不确定如何从上述格式中提取数据。我跑不成功了:

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

这种方式没有任何输出,这是令人惊讶的,因为样本数据显示每个答案都有相应的字段。

3 个答案:

答案 0 :(得分: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 :(得分: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'];  
}

尝试一下,看看它是否有效。

答案 2 :(得分: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。