(PHP / MySQL)将数据库结果转换为数组的问题

时间:2014-01-24 06:28:52

标签: php

背景:我有一个看起来像这样的数据库。

TITLE                        ANDROID       OS X        WINDOWS
World of Goo                    1            1            1
Superman 64 GOTY Edition        0            1            1
Seinfeld: The Game              1            0            1

依此类推,旨在代表一个游戏集合。有一个varchar列代表标题,然后是每个平台的布尔值。

我的愿望是使用PHP将该数据库转换为一个读取

的页面
 Super Mario 64 (N64)  
 World of Goo (Windows, Android)

依此类推,只列出标题可用的平台。

问题:根据我使用的解决方案,我要么(Windows)(Android)或(Windows,Android)(Windows,Android)(Windows,Android)(Windows,Android) )。

这是写的。

$q = mysqli_query($c,"SELECT * FROM GAMES");

while ($row = mysqli_fetch_assoc($q)) {
$platforms = array();                   
    foreach ($row AS $column => $value) {

        if ($column == "Name") {
            echo "<br />" . $value;
            continue;
        }


        if ($value == 1) {          
            array_push($platforms,$column); 

        }

        if (count($platforms)) {
            print_r($platforms);
        }
    }
}

此代码的意图是

  1. 循环连续的每个项目。
  2. 如果您所在的单元格是名称,请回显它。
  3. 如果你所在的单元格中有一个“1”,那么我们拥有该平台的游戏,所以将该平台的名称存储在一个数组中。
  4. 在行的末尾,显示该数组。
  5. 现在问题是:如果我执行该代码,数组是完全形成的,但我没有得到一个数组,我在数据库中每列得到一个数组,所以它只是一遍又一遍地回应平台。

    如果我将第3行(“$ platforms = array();”)移到foreach循环中,那么就避免了这个问题,但是我没有得到一个完整形成的数组,我为每个平台获得了一个单独的数组。

    那么...... 应该我要放那条线?我用管理平台阵列的方式弄乱了一些简单的事情,但我并不聪明或经验不足以弄明白。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

这可以解决您的问题。

while ($row = mysqli_fetch_assoc($q)) {
    $platforms = array();
    echo $row['TITLE'];
    foreach($row as $column => $val):
        $val == 1 ? $platforms[] = $column:;
    endforeach;
    echo '<pre>', print_r($platforms, true) ,'</pre>';

}