【问题标题】:PDO fetch array of arrays. Outer has numeric index. Inner has associative indexPDO 获取数组数组。外部有数字索引。内部有关联索引
【发布时间】:2015-03-10 07:48:36
【问题描述】:

我正在研究学生课程和答案的数据库。每个作业和每个结果都有一个关联数组,其中包含六个或更多字段(列),存储在 MySQL 数据库中的课程和答案表中。

我使用 sql PDO execute() 来获取所有分配,也使用不同的 sql 来获取所有结果。

FetchAll 为我提供了一个外部数字数组和一个具有数字索引和关联索引的内部数组。我只想要内部数组上的关联索引。 ->fetch(\PDO::FETCH_ASSOC); 什么也没给我。 (由于命名空间的 \ - 没有 \ 我得到一个错误)->fetchAll(); 给了我一个外部数字索引数组和具有两个索引的内部数组。

我可以去掉内部数字索引或忽略它们,但这看起来很笨拙,因为这些内部数组有多种使用方式。

也许答案在 sql 而不是 fetch 中。到目前为止,我想出的最好的方法是去掉数字索引:

    $stmt->execute();
    $rows = $stmt->fetchAll();
    foreach ($rows as $key=>$value) {
        foreach ($value as $key2=>$value2) {
            if (is_numeric($key2) === TRUE) {
                unset($value[$key2]);
            }
        }
        $rows[$key] = $value;
    }
    return $rows;

有没有更好的办法?

吉姆富夸

【问题讨论】:

  • fetchAll() 也将接受PDO::FETCH_ASSOCIts first arg is $fetch_stylefetch() 相同。
  • 至于从fetch()得到nothing,你什么时候打电话的?如果 fetchAll() 已经被调用,那么内部记录指针将没有行可返回,它将返回 false
  • 谢谢迈克尔,你是对的。我不明白 fetchAll() 可能包含限制。使用 $rows = $stmt->fetch(\PDO::FETCH_ASSOC);我只得到了一个内部数组作为关联数组。没有外部阵列,并且缺少内部阵列之一。因为它们是相同的,所以我无法分辨哪个内部数组丢失了。使用 $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);我得到了我正在寻找的东西。外部数组有一个数字索引,内部数组有一个关联索引。
  • 您应该继续在下面发布您的解决方案作为答案。

标签: php mysql arrays pdo fetch


【解决方案1】:

在 Michael Berkowski 的评论的帮助下,我尝试了一个实验。

使用 $rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);我得到了我正在寻找的东西。外部数组有一个数字索引,内部数组有一个关联索引。

使用 $rows = $stmt->fetchAll();我得到了我试图避免的重复。

使用 $rows = $stmt->fetch(\PDO::FETCH_ASSOC);我只将内部数组之一作为关联数组。没有外部数组,缺少一个内部数组。因为它们是相同的,所以我无法判断哪个内部数组丢失了。

吉姆富夸

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多