我正在尝试解析 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。
关于PHP解析sql结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461084/