2013-09-26 71 views
0

好的,所以我有一個'TLD'的列表,我想循環並創建一個圖表在PHP中。變量CakePHP和'設置'在視圖

我想查詢每個頂級域名(TLD),並使用該頂級域名(TLD)的名稱作爲變量。即yahoo.com將是$ yahoocom,以便我可以爲數據庫中的所有「TLD」創建圖表。

我的代碼:

 $tld = $this->Report->getTLDs(); 

    foreach($tld as $row){ 

     $tld = str_replace('.','', $row['inboxer_tlds']['tld_name'] . 'openchart'); //yahoocomopenchart 

     $$tld = new GoogleCharts(); 

     $$tld->type("PieChart"); 
     $$tld->options(array('title' => "Opens Stats for ". $row['inboxer_tlds']['tld_name'])); 
     $$tld->columns(array(
      'tld' => array(
       'type' => 'string', 
       'label' => 'tld' 
      ), 
      'number' => array(
       'type' => 'number', 
       'label' => 'number' 
      ) 
     )); 

     $$tld->addRow(array('tld' => $row['inboxer_tlds']['tld_name'], 'number' => $junk['0']['0']['COUNT(*)'])); 

     $this->set(compact('tld')); 
    } 

首先,我使用了可變的變量嗎?我得到這個錯誤:

get_class()預計參數1是對象

我 '想' $$ TLD應該等於$ yahoocom?

最後,是否有可能在視圖中設置?通常情況下,你只需要設置(compact('variable')),但由於沒有美元符號,......我不知道?

回答

0

這對我來說看起來有些不可思議,我會拋棄它,並使用一個TLD名稱作爲鍵的數組。

Somethiing像這樣(請注意,我也改變了變量名和東西,以使它少許清潔劑):

$tlds = $this->Report->getTLDs(); 

$charts = array(); 
foreach($tlds as $tld) { 

    $name = $tld['inboxer_tlds']['tld_name']; 

    $chart = new GoogleCharts(); 

    $chart->type('PieChart'); 
    $chart->options(array('title' => 'Opens Stats for ' . $name)); 
    $chart->columns(array(
     'tld' => array(
      'type' => 'string', 
      'label' => 'tld' 
     ), 
     'number' => array(
      'type' => 'number', 
      'label' => 'number' 
     ) 
    )); 

    $chart->addRow(array('tld' => $name, 'number' => $junk['0']['0']['COUNT(*)'])); 

    $charts[$name] = $chart; 
} 

$this->set(compact('charts')); 

所以,你最終會在您的視圖名爲charts變量,包含類似的結構:

Array 
(
    [google.com] => GoogleCharts Object 
    [yahoo.com] => GoogleCharts Object 
    ... 
) 

爲了完整起見,可以通過將名稱作爲一個變量,即

使用動態變量與
compact($tld) 

您也可以爲set()手動創建數組:

$this->set(array($tld => $$tld)); 

或傳遞兩個參數,第一個是名稱,所述第二值:

$this->set($tld, $$tld);