2017-09-02 102 views
0

想知道您是否可以帮助我。我正在查询一张表,用H轴时间和V轴计数填充一个图表,并试图根据数据库表中的服务器动态地向图表添加过滤器。在这一刻它的静态。PHP从数据库查询中添加数组的密钥

I am using filters to select

我用下面的代码来查询数据库和系列添加到图表

$results = array(); 

    foreach(\IPS\Db::i()->select('*', 'stats', $where, 'time ASC') as $row) 
    { 
     $value = '_'.$row['server']; 
     if(!isset($results[ $row['time'] ])) 
     { 
      $results[ $row['time'] ] = array(
       'time' => $row['time'], 
       '_64' => 0, 
       '_66' => 0 
      ); 
     } 
      //$results[ $row['time'] ][$value] = 0; 
      if ($value == '_64') 
      { 
       $results[ $row['time'] ]['_64'] = $row['value_1']; 
      } 
      elseif($value == '_66') 
      { 
       $results[ $row['time'] ][ '_66' ] = $row['value_1']; 
      } 

     } 
     return $results; 

,并添加过滤器

$chart->addSeries('_66', 'number'); 
$chart->addSeries('_64', 'number'); 

我试图让它动态的做

foreach(\IPS\Db::i()->query("SELECT DISTINCT server FROM stats ORDER BY server") as $row) 
    { 
     $value = '_'.$row['server']; 
     $chart->addSeries($value, 'number'); 
    } 

$value = '_'.$row['server']; 
     if(!isset($results[ $row['time'] ])) 
     { 
      $results[ $row['time'] ] = array(
       'time' => $row['time'], 
       $value => 0, 
      ); 
     } 
      $results[ $row['time'] ][$value] = $row['value_1']; 

但这并没有以任何方式工作。我想我会添加到阵列完全错误。有什么建议吗?

阵列应该是这样的

array (size=8) 
1504025011 => 
array (size=3) 
    'time' => int 1504025011 
    '_64' => int 2 
    '_66' => int 0 
1504094803 => 
array (size=3) 
    'time' => int 1504094803 
    '_64' => int 0 
    '_66' => int 14 

而是

array (size=8) 
1504025011 => 
array (size=2) 
    'time' => int 1504025011 
    '_64' => int 2 
1504094803 => 
array (size=2) 
    'time' => int 1504094803 
    '_66' => int 14 

回答

1

我设法使它工作进行到底。最后简单到了。 (通常情况下)当然我之前尝试过,并没有工作。一定错过了一些东西。

我使用此代码将键/值添加到数组。

foreach(\IPS\Db::i()->query("SELECT DISTINCT(server) AS Server FROM stats ORDER BY Server DESC;") as $rows) 
     { 
      $value = '_' .$rows['Server']; 
      $results[ $row['time'] ][$value] = 0; 
     }