Php 将两个数组相互组合,并从MySQL数据库中获取名称
问题: 将两个数组相互组合,并使用MySQL表中的数据构建一个数组。在一个表(betyg_answers)中,我有两列,分别称为类别和项目Php 将两个数组相互组合,并从MySQL数据库中获取名称,php,mysql,arrays,database-design,variables,Php,Mysql,Arrays,Database Design,Variables,问题: 将两个数组相互组合,并使用MySQL表中的数据构建一个数组。在一个表(betyg_answers)中,我有两列,分别称为类别和项目 类别包含:1,5,9,13,16 项目包含:2,3,4,6,7,8,10,11,12,14,15,17,18 这些值存储在变量中:$categories和$items 在另一个表(betyg_category)中,我存储了每个类别的名称和名称,如下所示: 问题: 我该如何构建一个大数组,从超级级别的类别开始,一直到较低级别的项目 换句话说,我希望数组看
- 类别包含:1,5,9,13,16
- 项目包含:2,3,4,6,7,8,10,11,12,14,15,17,18
Litteratur (Category = 1)
Integration av källorna (Item = 2)
Belysning av egna resultat (Item = 3)
Referenser (Item = 4)
Validitet (Category = 2)
Huvudsyfte (Item = 5)
Oberoende och beroende variabler (Item = 6)
Analysmetoderna (Item = 7)
and so forth..
提前感谢您的建议。假设您正在使用PDO:
$result = mysql_query("select * from betyg_category where CID IN($categories)");
$array = array();
while($mainrow = mysql_fetch_array($result)) {
$array[] = $mainrow['Item'] . "(Category = " .$mainrow['CID']. ")";
$child = mysql_query("select * from betyg_category where Parent = " .$mainrow['CID'] . "");
while($childrow = mysql_fetch_array($child)) {
$array[] = $childrow['Item'] . "(Item = " .$childrow['CID']. ")";
}
}
$sql = '
SELECT
a.CID,
a.Item,
a.Parent,
IF(NOT a.Parent, (SELECT GROUP_CONCAT(CID) FROM betyg_category WHERE Parent = a.CID), NULL) AS catitems
FROM
betyg_category a
ORDER BY
a.CID';
$stmt = $pdo->query($sql);
$resultset = $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$itemarray = array();
foreach($resultset as $row)
{
if(!empty($row[0]['catitems']))
{
foreach(explode(',', $row[0]['catitems']) as $cid)
{
$itemarray[$row[0]['Item']][$cid] = $resultset[$cid][0]['Item'];
}
}
elseif(!$row[0]['Parent']) // Account for categories with no items in it
{
$itemarray[$row[0]['Item']] = array();
}
}
然后,您可以通过以下方式可视化阵列:
echo '<pre>';
print_r($itemarray);
echo '</pre>';
假设并希望您正在使用PDO:
$sql = '
SELECT
a.CID,
a.Item,
a.Parent,
IF(NOT a.Parent, (SELECT GROUP_CONCAT(CID) FROM betyg_category WHERE Parent = a.CID), NULL) AS catitems
FROM
betyg_category a
ORDER BY
a.CID';
$stmt = $pdo->query($sql);
$resultset = $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
$itemarray = array();
foreach($resultset as $row)
{
if(!empty($row[0]['catitems']))
{
foreach(explode(',', $row[0]['catitems']) as $cid)
{
$itemarray[$row[0]['Item']][$cid] = $resultset[$cid][0]['Item'];
}
}
elseif(!$row[0]['Parent']) // Account for categories with no items in it
{
$itemarray[$row[0]['Item']] = array();
}
}
然后,您可以通过以下方式可视化阵列:
echo '<pre>';
print_r($itemarray);
echo '</pre>';
你可以看到这个链接。。你可以看到这个链接。。我使用的是PDO,但是在你的代码中我得到了一个空白页,没有它,内容返回。考虑到所有列名和表名都正确,我基本上进行了复制/粘贴。在顶部,我检查了数据库连接,它正常工作。有什么不对劲吗?我使用的是MySQL,我的示例代码不应该向页面输出任何内容。它只是构建了一个数组,您可以使用我在第二个代码框中给出的代码将其可视化。当您打印
$itemarray
时,它会给您带来什么?它会给我一个空白页。考虑到db连接正常并且所有列和表名拼写正确,这是非常奇怪的。奇怪的是,它至少应该给你一些类似于Array()
,但只是一个空白页?您是否有错误报告(E|u STRICT | E|u ALL)代码>这样您就得到了所有错误?一点错误都没有,我使用的是PHP版本5.2.17。你可以在这里找到数据库表:如果你想试试的话。我正在使用PDO,但是在你的代码中我得到一个空白页,没有它,内容返回。考虑到所有列名和表名都正确,我基本上进行了复制/粘贴。在顶部,我检查了数据库连接,它正常工作。有什么不对劲吗?我使用的是MySQL,我的示例代码不应该向页面输出任何内容。它只是构建了一个数组,您可以使用我在第二个代码框中给出的代码将其可视化。当您打印$itemarray
时,它会给您带来什么?它会给我一个空白页。考虑到db连接正常并且所有列和表名拼写正确,这是非常奇怪的。奇怪的是,它至少应该给你一些类似于Array()
,但只是一个空白页?您是否有错误报告(E|u STRICT | E|u ALL)代码>这样您就得到了所有错误?一点错误都没有,我使用的是PHP版本5.2.17。您可以在这里找到数据库表:如果您愿意尝试的话。