从PDO查询返回包含列名的二维数组

时间:2014-02-06 21:52:05

标签: php mysql json pdo

我要做的是将数据库查询的结果集直接传递给Google DataTable。 (Google visualization api here)。

我的目标(至少这是我能想到使用它的方式)是使用Google的ArrayToDataTable()函数。为此,我需要我的查询返回一个我可以传递给这个函数的二维数组。我最初尝试使用PDO :: FETCH_ASSOC来做这件事,但是当我将结果编码为JSON时,我得到了谷歌API无法处理的行对象数组。然后我找到this question,并使用PDO: :FETCH_NUM,我得到一个二维数组,它更接近我想要的,但它省略了列标题。

是否有一种简单的方法可以获得一个二维数组,其第一个条目是列名,每个后续条目都是数据库查询中的一行?我认为这将是微不足道的,但我找不到解决方案,没有编写功能来做到这一点。

谢谢你, -Eric

编辑:

回应迈克尔的回答,我写了这个:

function assocTo2dArray($array){
    $return = array();
    $return[] = array_keys($array[0]);
    foreach($array as $row){
        $return[] = array_values($row);
    }
    return $return;
}

取得了相同的结果,但看起来更清洁。

1 个答案:

答案 0 :(得分:1)

这假设您已经构建并执行了一个准备好的语句(名为$stmt)。

$results = array();

$n = 0;
$fetchmode = PDO::FETCH_ASSOC;
while (true) {
    $row = $stmt->fetch($fetchmode);

    if ($row == null)
        break;

    if ($n == 0) {
        $results[0] = array(); //headers
        $results[1] = array(); //first row
        foreach ($row as $k => $v) {
            $results[0][] = $k;
            $results[1][] = $v;
        }

        $fetchmode = PDO::FETCH_NUM;
    } else {
        $results[] = $row;
    }

    $n++;
}

这应该做你想要的。