Как я могу распечатать ответы на вопрос с помощью PHP? - PullRequest
0 голосов
/ 21 августа 2009

Как использовать следующие примеры данных либо с foreach, либо с while циклом?

Я получаю следующие примеры данных, запустив

$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 ]

3 голосов
/ 21 августа 2009

Вот как вы делаете цикл 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, чтобы он это сделал.

2 голосов
/ 21 августа 2009

Поскольку ключ вас не интересует (т. Е. Номер ответа), вы можете пропустить первую половину второй части аргументов 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'];  
}

Попробуйте и посмотрите, работает ли он.

1 голос
/ 21 августа 2009
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...