PHP 解析 sql 结果集

PHP parsing sql result set

我正在尝试解析一个 SQL 结果集,但我 运行 遇到了多个问题。

        foreach ( $rows as $key => $row ) {
            die(print(gettype( $row )));  // DIE 1
            if ( is_array( $row ) ) {
                foreach ( (array)$row as $k => $r ) {
                    die(print_r($r));     // DIE 2
                    if ( !in_array( $r['proposal'], $proposals ) ) {
                        array_push( $proposals, $r['proposal'] );
                    }
                    if ( !in_array( $r['question'], $scorequestions ) && $r['type'] == 'score' ) {
                        array_push( $scorequestions, $r['question'] );
                    }
                    if ( !in_array( $r['question'], $recommendquestions ) && $r['type'] == 'recommend' ) {
                        array_push( $recommendquestions, $r['question'] );
                    }
                }
            }
        }

我的 $rows 是:(http://i.imgur.com/YUpZvBx.png)

+----------+--------+----------+-----------+----------+---------+-----------+-------------+------+
| question | title  | campaign | type      | proposal | avg     | recommend | conditional | cnt  |
+----------+--------+----------+-----------+----------+---------+-----------+-------------+------+
|      101 | Title1 |      104 | score     |       38 |  6.6667 |         0 |           0 |    3 |
|      101 | Title2 |      104 | score     |       39 |  9.6667 |         0 |           0 |    3 |
|      101 | Title3 |      104 | score     |       40 |  8.0000 |         0 |           0 |    2 |
|      101 | Title4 |      104 | score     |       41 |  3.0000 |         0 |           1 |    2 |
|      101 | Title5 |      104 | score     |       42 |  9.0000 |         0 |           0 |    1 |
|      101 | Title6 |      104 | score     |       43 |  9.0000 |         0 |           0 |    1 |
|      101 | Title7 |      104 | score     |       44 |  7.6667 |         0 |           0 |    3 |

$rows 是一个 SQL 结果集。 DIE 1 打印告诉我 $row 是一个数组,但 is_array() 函数认为它不是一个数组。

如果我跳过 if 循环(将其注释掉)和 运行 内部 foreach 循环,DIE 2 会给我:

Array ( [question] => 105 [campaign] => 104 [type] => recommend [proposal] => 42 [avg] => -1.0000 [recommend] => 1 [conditional] => 1 [cnt] => 1 [title] => Title5 [amount] => 300 [theme] => offline ) 1

但随后我在 $r['proposal'] 上收到非法字符串偏移错误。不知道我哪里错了。在发布之前,我已经通读了多个 SO 线程。

您直接遍历 $rows,而 $rows 是一个对象,它有一个包含实际数据的 $rows 成员。因此,您应该在外循环中迭代 $rows->rows。