0

OK、ループしてPHPでチャートを作成したい「TLD」のリストがあります。

各 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 に等しいはずだと「思った」のですか?

最後に、ビューで「設定」することは可能ですか? 通常は set(compact('variable')) を実行するだけですが、ドル記号がないため、わかりません。

4

1 に答える 1

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

または 2 つのパラメーターを渡します。最初のパラメーターは名前、2 番目のパラメーターは値です。

$this->set($tld, $$tld);
于 2013-09-26T23:22:09.880 に答える