$db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$items = 'SELECT items FROM menus';
$itemLink = 'SELECT itemLink FROM menus';
$itemQuery = $db->query($items);
$linkQuery = $db->query($itemLink);
$fetchItem = $itemQuery->fetch(PDO::FETCH_ASSOC);
$fetchLink = $linkQuery->fetch(PDO::FETCH_ASSOC);
$merged = array_merge($fetchItem,$fetchLink);
foreach($merged as $key=>$value){
echo "${key} => ${value} <br />";
}
这就是数据库中的样子:
items |itemLink
----------------------
Kill Bill|Kill Bill link
Preman |Preman link
所以,预期的输出,或者至少我认为必须是这样:
items => Kill Bill
items => Preman
itemLink => Kill Bill Link
itemLink => Preman Link
但代码的结果输出是:
items => Kill Bill
itemLink => Kill Bill Link
它缺少其他项目和itemLink
那么,我如何实现我想要的输出呢?
答案 0 :(得分:2)
$fetchItem = $itemQuery->fetch(PDO::FETCH_ASSOC);
$fetchLink = $linkQuery->fetch(PDO::FETCH_ASSOC);
这只获取每个结果集的第一行。您需要fetchAll
:
$fetchItem = $itemQuery->fetchAll(PDO::FETCH_ASSOC);
$fetchLink = $linkQuery->fetchAll(PDO::FETCH_ASSOC);
并调整其余代码。
foreach($merged as $entry) {
foreach( $entry as $key => $value ) {
echo "${key} => ${value} <br />";
}
}
修改强>
fetch
的调用仅检索结果集的第一行,而fetchAll
将完整的结果集解析为数组。所以对象后来看起来像这样:
Array(
[0] => { 'items' => 'Kill Bill' },
[1] => { 'items' => 'Preman' }
)
Array(
[0] => { 'itemLink' => 'Kill Bill' },
[1] => { 'itemLink' => 'Preman' }
)
array_merge
将两个数组连接到以下内容:
Array(
[0] => { 'items' => 'Kill Bill' },
[1] => { 'items' => 'Preman' },
[2] => { 'itemLink' => 'Kill Bill' },
[3] => { 'itemLink' => 'Preman' }
)
所以我们现在有了一个二维数组。要遍历这些值,我们首先需要选择每个$entry
,这可以在外部foreach
中完成,然后可以访问内部foreach
中的键/值结构。
正如其他评论所指出的:如果您想保留items
和itemLink
之间的联系,您应该首先将查询更改为
SELECT items, itemLink FROM menus
答案 1 :(得分:0)
您可以使用简单的array_combine()功能来完成您现在要执行的操作。
$merged = array_combine($fetchItem, $fetchLink);
这将使$fetchItem
中的所有项目成为$fetchLink
项目的关键。