0

すべての割り当てを 1 つの配列だけでループしようとしていますが、下の画像のようなエラーが発生します。だれか教えてもらえますか?なぜこのエラーが表示されるのですか?どうもありがとう

ここに画像の説明を入力

これは私のtemplate.phpです

class Template{
    private $vars = array();

    public function assign($key, $value){
        $this->vars[$key] = $value;
    }

    public function render($template_name){
        $path = $template_name. '.html';

        if(file_exists($path)){
            $contents = file_get_contents($path);

            foreach($this->vars as $key => $value){
                $contents = preg_replace('/\[' . $key . '\]/', $value, $contents);
            }
            $pattern = array(
                                '/\<\!\-\- if (.*) \-\-\>/',
                                '/\<\!\-\- else \-\-\>/',
                                '/\<\!\-\- endif \-\-\>/',
                                '/\<\!\-\- echo (.*) \-\-\>/'
                            );
            $replace = array(
                                '<?php if($1) : ?>',
                                '<?php else : ?>',
                                '<?php endif; ?>',
                                '<?php echo ($1) ?>'
                            );
            $contents = preg_replace($pattern, $replace, $contents);

            eval(' ?>' . $contents . '<?php ');
        }else {
            exit('<h1>Template error!</h1>');
        }
    }

}

?>

value を割り当てるための assign 、その後、私のhtmlで [value] と書くだけで値を表示できます

header.php

<?php

session_start();
header('Content-Type: text/html; charset=utf-8');
include $_SERVER['DOCUMENT_ROOT'] . '/class/template.php';

$game = '2';
$tech = '3';
$beauty = '4';
$bagua = '1';

$template = new Template;
$template->assign('sitename', 'site name');
$template->assign('title', '');

$code = array(
                'test1',
                'test2',
                'test3'
            );

$word = array(
                'haha1',
                'haha2',
                'haha3'
            );

$template->assign($code, $word);
$template->assign('test4', 'haha4');
$template->render('view/default/header');
?>

header.html

[test1][test2][test3][test4]

結果: ここに画像の説明を入力

4

2 に答える 2

0

あなたが望むことを行う組み込みのPHP関数がすでにあります: array_combine

サンプルコードでは、次のことができます。

public function assign($key, $value){
    if(is_array($key)) {
        $this->vars = array_merge($this->vars, array_combine($key, $value));
    } else {
        $this->vars[$key] = $value;
    }
}

または、forループを使用して同様のものを実装するだけです。

于 2013-06-08T08:37:33.770 に答える
0

ダミアンが指摘しているように、配列を別の配列のキーに割り当てようとしていると、エラーが発生します。

ここでの良い解決策は、配列を受け入れるように assign メソッドを微調整することです。

public function assign($key, $value = false)
{
    if (is_array($key))
    {
        foreach ($key as $k => $v) $this->vars[$k] = $v;
    }
    else
    {
        $this->vars[$key] = $value;
    }
}

これで、配列または $key、$value を assign メソッドに送信できるようになり、どちらの状況も処理されます。

またはもちろん、追加するキーを配列ではなく文字列に変更することもできます:)

于 2013-06-08T08:31:39.193 に答える