0

如何将以下示例数据与 aforeachwhile循环一起使用?

我通过运行得到以下示例数据

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

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

4

3 回答 3

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 参数传递给它才能执行此操作。

于 2009-08-20T23:14:11.723 回答
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'];  
}

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

于 2009-08-20T23:18:58.580 回答
1
foreach( $answers as $quess ) {
  $an = $quess['answer'];
  $name = $quess['username'];
  $time = $quess['was_sent_at_time'];
}

你有一个二维数组:
Array[0] 包含数组
Array[0][0] 是一个值
数组 Array[0][1] 是一个值数组
......

因此,foreach 循环通过第一个(或容器)数组。foreach 中的每个子值也是一个数组(array[0][0]、array[0][1] 等)。因此,要访问单个值,您必须以数组样式访问它们:array['index'] = value.

于 2009-08-20T23:10:59.937 回答