2014-01-24 105 views
0

背景:我有一个看起来像这样的数据库。(PHP/MySQL)将数据库结果转换为数组的问题

 
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. 在该行的末尾,显示该数组。

现在,这里的问题:如果我执行的代码,该阵列完全形成,但我没有得到一个数组回来,我得到每列一个阵列在我的数据库,所以它只是回声平台一遍又一遍。如果我将第3行(“$ platforms = array();”)移动到foreach循环中,那么可以避免这个问题,但是我没有得到一个完全形成的数组,我得到一个单独的数组。阵列为每个单独的平台。

那么...哪里应该我要放那条线?我用我管理平台阵列的方式搞乱了一些简单的事情,但我不聪明或经验不足,无法解决这个问题。任何帮助都会很棒。

+0

平台应该是一个多维数组。在'while($ row = mysql_'调用你将添加'$ platforms [$ name] = array',然后在'foreach'循环中添加平台;'array_push($ platforms [$ name],$ column );' – Luceos

回答

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>'; 

} 
+0

非常感谢,解决了它! – GreenTriangle

相关问题