1

foreach ステートメントを追加しようとしていますが、配列を配置できないためpreg_replace、エラーがスローされ続けます。両方を使用するにはどうすればよいですか?preg_replace(): Parameter mismatch, pattern is a string while replacement is an arrayforeachvars

ここにあるclass

private $vars = array();

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

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

    if (file_exists($path)) {

        $content = file_get_contents($path);

        foreach ($this->vars as $key => $value) {
            $content = preg_replace('/\{' . $key . '\}/', $value, $content);
        }

        /* PHP Tags */
        $content = preg_replace('/\{php\}/', '<?php ', $content);
        $content = preg_replace('/\{\/php\}/', ' ?>', $content);

        /* IF Statement */
        $content = preg_replace('/\{if (.*)\}/U', '<?php if ($1): ?>', $content);
        $content = preg_replace('/\{elseif (.*)\}/U', '<?php elseif ($1): ?>', $content);
        $content = preg_replace('/\{else\}/U', '<?php else: ?>', $content);
        $content = preg_replace('/\{\/if\}/U', '<?php endif; ?>', $content);

        /* FOREACH Statement */
        $content = preg_replace('/\{foreach (.*)\}/e', '<?php foreach ($1) { ?>', $content);
        $content = preg_replace('/\{\/foreach\}/e', '<?php }; ?>', $content);

        eval(' ?>' . $content . '<?php ');

ここに変数ファイルがあります

include_once 'gate.php';

$gate = new Gate;

$gate->assign('pagetitle', 'Test Document');
$gate->assign('username', 'Zach');
$gate->assign('age', 21);

$names = array(
        "Name",
        "Name2",
        "Name3",
        "Name4"
    );

$gate->assign('members', $names);

$gate->render('test');

ここにHTMLがあります

{foreach ({members} as $member)}
       <p>$member</p>
{/foreach}

preg_replace配列が関数によって受け入れられるようにすることを含むと思われるエラーを修正する方法を知る必要があるだけです

4

1 に答える 1

1

$namesリテラル配列を作成するための PHP コードを含む文字列に設定します。

$names = 'array(
        "Name",
        "Name2",
        "Name3",
        "Name4"
    )';

$gate->assign('members', $names);
于 2013-05-10T23:37:29.010 に答える