好的,我有一份' TLD列表'我想循环并在PHP中创建一个图表。
我想查找每个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?
最后,是否可以设置'在视图中?通常情况下你会设置(紧凑('变量')),但由于没有美元符号,......我不知道?
答案 0 :(得分:0)
对我来说这看起来有点奇怪,我会抛弃它并使用带有TLD名称的数组作为键。
像这样的东西(注意我也改变了变量名称和东西,以使它更清洁一点):
$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
使用动态变量,即
compact($tld)
您也可以手动为set()
创建数组:
$this->set(array($tld => $$tld));
或传递两个参数,第一个是名称,第二个是值:
$this->set($tld, $$tld);