Php 从PDO查询返回具有列名的二维数组

Php 从PDO查询返回具有列名的二维数组,php,mysql,json,pdo,Php,Mysql,Json,Pdo,我试图做的是将数据库查询的结果集直接传递到Google DataTable中。(). 我的目标(至少这是我能想到的使用它的方式,就是使用Google的ArrayToDataTable()函数。为此,我需要我的查询返回一个可以传递到此函数的二维数组。我最初尝试使用PDO::FETCH_ASSOC进行此操作,但当我将结果编码为JSON时,我得到了一个google API无法处理的行对象数组。然后我找到了,并使用PDO::FETCH_NUM得到了一个二维数组,它是非常接近我想要的,但它省略了列标题

我试图做的是将数据库查询的结果集直接传递到Google DataTable中。().

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

有没有一种简单的方法可以获得一个二维数组,它的第一个条目是列名,随后的每个条目都是数据库查询中的一行?我认为这很简单,但如果不编写函数,我就找不到解决方案

谢谢,, -埃里克

编辑:

作为对Michael回答的回应,我写了以下内容:

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

这实现了相同的结果,但看起来更干净。

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


这应该可以满足您的要求。

您是自己编写SQL查询的吗?是的,我正在编写自己的查询。这很有效,我想这样做是可以的。我只是希望有一种更干净的方法,比如fetch_样式,它可以作为查询的一部分,而不必查询然后操纵结果集。瞧在PDOStatement函数中,我没有看到一个简洁的方法。它必须是fetchAll类型的函数,因为您只希望包含一次标题。您可以“手动”将列标题作为第一行启动结果数组,但是谁想要呢?当然,对SQL的任何更改都有多个地方可以更改!而且,似乎有一种更干净的方法可以做到这一点。(编辑我不知道如何在注释中的代码中显示此内容…包括在原始帖子中。)
$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++;
}