1

问题:

将两个数组相互组合并使用 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)中,我存储每个类别的名称和名称,如下所示:

在此处输入图像描述

问题:

我将如何构建一个大数组,该数组以超级别的类别开始并下降到较低级别的项目?

换句话说,我希望数组看起来像:

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..

在此先感谢您的任何建议。

4

2 回答 2

1

假设并希望您正在使用 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>';

这给了你:

Array
(
    [Litteratur] => Array
        (
            [2] => Integration av källorna
            [3] => Belysning av egna resultat
            [4] => Referenser
        )

    [Validitet] => Array
        (
            [6] => Huvudsyfte
            [7] => Oberoende och beroende variabler
            [8] => Analysmetoderna
        )

    [Reliabilitet] => Array
        (
            [10] => Metodval
            [11] => Metodbeskrivning
            [12] => Databearbetning
        )

    [Språk, stil och struktur] => Array
        (
            [14] => Språk och stil
            [15] => Struktur
        )

    [Arbetssätt] => Array
        (
            [17] => Försvar och opposition
            [18] => Etiska och samhälleliga aspekter
        )

    [Etik] => Array
        (
            [20] => Test 1
        )

)
于 2012-06-14T10:38:47.197 回答
0
$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']. ")";
}
}
于 2012-06-14T09:53:10.413 回答