我确定我一定做错了什么,但我似乎无法在任何地方找到答案(至少目前在文档和 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
)
要修复您的原始代码,您可以像这样修改它:
$medias[] = $data['media_idMedia'];
关于php - 为什么我的代码使 PDO 返回嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275608/