繁体   English   中英

PHP数组从其他数组中选择结果

[英]PHP Array select result from other array

我有一个带有某些类别的sql表,我将它们放在数组中..都很好,但是当我尝试从另一个表foreach类别中获取数据时,总是返回我选择的第一个类别。

这是我的代码:

$gameguidecategoryes = array();
$gameguides = array();  


$dbselectgameguidecategoryes = new DB_MSSQL;
$dbselectgameguidecategoryes->Database=$newweb_db;
$dbselectgameguidecategoryes->query("Select GameGuideCatNr,GameGuideCatName_$languageid as GameGuideCatName,GameGuideCatImage from GameGuide_Category where GameGuideCatVisible = 1 order by GameGuideCatOrder asc");
for($i=0;$i < $dbselectgameguidecategoryes->num_rows();++$i) { 
    if ($dbselectgameguidecategoryes->next_record()){
        $GameGuideCatNr = $dbselectgameguidecategoryes->f('GameGuideCatNr');
        $GameGuideCatName = $dbselectgameguidecategoryes->f('GameGuideCatName');
        $GameGuideCatImage = $dbselectgameguidecategoryes->f('GameGuideCatImage');
    }
    $gameguidecategoryes_temp = array(
        'ggcname' => $GameGuideCatName,
        'ggcimg' => $GameGuideCatImage,
    );

    $gameguidecategoryes[$i] = $gameguidecategoryes_temp;

    $dbselectgameguide = new DB_MSSQL;
    $dbselectgameguide->Database=$newweb_db;
    $dbselectgameguide->query("Select GameGuideID,GameGuideName_$languageid as GameGuideName from GameGuide_Content where GameGuideCat = $GameGuideCatNr and GameGuideVisible = 1 order by GameGuideOrder asc");

    for($ii=0;$ii < $dbselectgameguide->num_rows();++$ii) {
        if ($dbselectgameguide->next_record()){
            $GameGuideID = $dbselectgameguide->f('GameGuideID');
            $GameGuideName = $dbselectgameguide->f('GameGuideName');
        }
        $gameguides_temp = array(
            'ggid' => $GameGuideID,
            'ggn' => $GameGuideName,
        );

        $gameguides[$ii] = $gameguides_temp;
    }
}

为什么$ gameguides仅返回第一类的数据?

谢谢

更好地编写干净代码

$gameguidecategoryes = $gameguides = $gameguidescategoryids = array();  

$dbselectgameguidecategoryes = new DB_MSSQL;
$dbselectgameguidecategoryes->Database=$newweb_db;
$dbselectgameguidecategoryes->query("Select GameGuideCatNr,GameGuideCatName_$languageid as GameGuideCatName,GameGuideCatImage from GameGuide_Category where GameGuideCatVisible = 1 order by GameGuideCatOrder asc");

while ($dbselectgameguidecategoryes->next_record()) {
    $gameguidescategoryids[] = $dbselectgameguidecategoryes->f('GameGuideCatNr');

    $gameguidecategoryes[] = array(
        'ggcname' => $dbselectgameguidecategoryes->f('GameGuideCatName'),
        'ggcimg' => $dbselectgameguidecategoryes->f('GameGuideCatImage'),
    );
}

if (count($gameguidescategoryids)) {
    $dbselectgameguide = new DB_MSSQL;
    $dbselectgameguide->Database=$newweb_db;
    $dbselectgameguide->query("Select GameGuideID,GameGuideName_$languageid as GameGuideName from GameGuide_Content where GameGuideCat IN (".implode(',', $gameguidescategoryids).") and GameGuideVisible = 1 order by GameGuideOrder asc");

    while ($dbselectgameguide->next_record()){
        $gameguides[] = array(
            'ggid' => $dbselectgameguide->f('GameGuideID'),
            'ggn' => $dbselectgameguide->f('GameGuideName'),
        );
    }
}

您的第二个循环不断被第一个循环所破坏。 例如,考虑发生了什么:

  1. 您获取类别,(假装)其中有4个类别。
  2. 您将一些信息存储在$gameguidecategoryes[0]
  3. 您运行第二个查询,获取类别0的一些内容,例如3条记录
  4. 那被存储在$gameguides[0][1][2]
  5. 您的外循环再次滴答,您从categoryes[1]开始categoryes[1]
  6. 内部循环再次滴答$gameguides[0] ,您获得4条记录,现在您又将它们存储到SAME中$gameguides[0][1][2][3]等。
  7. 现在,您已经丢弃了在第一个循环中获取的数据,并且将

对您获取的每个类别都执行此操作。

此代码效率很低。 您应该学习如何使用JOIN ,并获取单个结构,例如

SELECT category.id, category.name, ...., content.id, content.name
FROM categories
LEFT JOIN content ON categories.id = content.category_id
ORDER BY ...

然后像

$data = array();
while($row = fetch row from db) {
    if (!isset($data[$row['category.id']]) {
       $data[$row['category.id']] = array(
           'name' => $row['category.name'],
           'content' => array()
       );
    }
    $data[$row['category.id']]['content'][] = array(
          ... save content data here
    );
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM