【问题标题】:Return a 2-dimensional array with column names from PDO query从 PDO 查询返回具有列名的二维数组
【发布时间】:2014-03-04 02:28:37
【问题描述】:

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

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

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

谢谢你, -埃里克

编辑:

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

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

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

【问题讨论】:

  • 你自己写SQL查询吗?
  • 是的,我正在编写自己的查询。

标签: php mysql json pdo


【解决方案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++;
}

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

【讨论】:

  • 这行得通,我认为可以完成类似的事情。我只是希望有一种更简洁的方法,例如 fetch_style 可以将其作为查询的一部分,而不是必须查询然后操作结果集。
  • 查看PDOStatement函数,没有看到简洁的方法。它必须是一个 fetchAll 类型的函数,因为您只想包含一次标题。您可以“手动”以列标题作为第一行的结果数组开始,但是谁想要呢?当然,对 SQL 的任何更改,您都可以在多个地方进行更改!
  • 此外,似乎有一种更清洁的方法。 (编辑我无法弄清楚如何在评论中的代码中显示此内容......将其包含在原始帖子中。)
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2016-08-03
  • 2016-02-29
相关资源
最近更新 更多