变量变量CakePHP和View中的'set'

时间:2013-09-26 22:44:03

标签: php cakephp

好的,我有一份' 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?

最后,是否可以设置'在视图中?通常情况下你会设置(紧凑('变量')),但由于没有美元符号,......我不知道?

1 个答案:

答案 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);