php - 为什么我的代码使 PDO 返回嵌套数组?

标签 php sql arrays pdo multidimensional-array

我确定我一定做错了什么,但我似乎无法在任何地方找到答案(至少目前在文档和 SO 上都找不到)。我是 PHP 和 SQL 的初学者。

我有一个名为“mObject_has_media”的简单表格,其中只有两列“media_idMedia”和“mObject_idmObject”

当我尝试使用这段代码查询表格时,

public function selectMediaIds (MObject $object) {
    $medias = array ();
    $req = $this -> _db -> query ('SELECT media_idMedia FROM mObject_has_media WHERE mObject_idmObject = ' . $object -> id ());
    while ($data = $req -> fetch (PDO::FETCH_ASSOC)) {
        $medias[] = $data;
    }
    $req -> closeCursor ();
    return $medias;
}

问题是这样的:当我 var_dump 方法结果的内容时,我得到:

array (size=2)
  0 => 
    array (size=1)
      'media_idMedia' => string '52' (length=2)
  1 => 
    array (size=1)
      'media_idMedia' => string '53' (length=2)

我想摆脱那些嵌套数组,只得到类似的东西:

array (size=2)
  0 => 'media_idMedia' => string '52' (length=2)
  1 => 'media_idMedia' => string '53' (length=2)

所以我可以简单地将这个数组运行到一个 foreach 循环中...我确信这个问题与 fetch() 方法有关,但尽管尝试了不同的选项,但我还没有能够获得所需的行为。

这里提出了一个类似的问题(我认为):PDO::FETCH_ASSOC Does not return the correct table columns但答案提到了 Zend 框架,我根本没有使用任何框架,这只是普通的 PHP。

最佳答案

让我们创建一个仅用于测试目的的多维数组:

$array = array(
    array('foo' => 'value1'),
    array('foo' => 'value2')
);

现在考虑以下代码:

$result = array();

while ($row = array_shift($array)) {
    // $row will contain one nested array at a time
    $result[] = $row;
}

print_r($result);

$row 是一个数组,使用语句 $result[] = $row;,您将整个数组推送到 $result 从而使其成为多维的。

这将输出:

Array
(
    [0] => Array
        (
            [foo] => value1
        )

    [1] => Array
        (
            [foo] => value2
        )

)

现在,考虑以下代码:

$result = array();

while ($row = array_shift($array)) {
    // $row will contain one nested array at a time
    $result[] = $row['foo'];
}

print_r($result);

通过语句 $result[] = $row['foo'];,我们正在插入 value $row['foo']$result 数组。在循环迭代结束时,$result 将保存 foo 行值的数组。

这将输出:

Array
(
    [0] => value1
    [1] => value2
)

Demo


要修复您的原始代码,您可以像这样修改它:

$medias[] = $data['media_idMedia'];

关于php - 为什么我的代码使 PDO 返回嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275608/

相关文章:

php - Laravel 5.4 验证器看不到输入字段

php - 在 If 语句插入数据库

SQL 列求和 - 在对列求和之前使用 if 语句将行值加倍

c# - 将 BYTE 数组转换为 INT

php - 调用返回后,PHP 是否垃圾收集函数范围的对象?

php - MYSQL,使用多个SUMS,而不是将多个列加在一起

sql - 使用liquibase修改SQL-Server中的数据类型和数据

sql - 在 sql where 子句中执行 "if"类型语句

arrays - 批量嵌套变量

arrays - WebKitView请求没有通过?