使用php作为strtr的数组值

时间:2016-03-19 06:17:00

标签: php replace

我正在尝试在我想要执行的内部加载PHP的文件,我也希望能够用我选择的值替换特定的单词。

例如,我有2个文件,index.phptest.php

Index.php

<?php
$stmt = $dbh->prepare("SELECT * FROM users WHERE `id` = :id");
$stmt->bindValue(":id",$_COOKIE[id]);
$stmt->execute();

$in = $stmt->fetch(PDO::FETCH_ASSOC);

function callback($buffer)
{
$ID = 'hesdfsdfsdy';
$arr = array(
    "{ID}" => ''.$in['id'].'',
    "{TITLE}" => 'Testttingggg'
);
  return (strtr($buffer,$arr));
}

ob_start("callback");
include 'test.php';
?>

一切正常,但{ID}空出来的事实除外,因为它不会显示$in['id']作为值。如果我使用$ID代替$in['id'],则会显示"hesdfsdfsdy"的值,就像它的意图一样。所以有些人与$in不太合作。如果我在$in['id']中使用test.php,则可以正常使用。它只是因为它不想与替代品合作。

test.php

<?php
echo '{TITLE} - '.$in["id"].';
?>

所以我的问题是,为什么在使用$in["id"]时我无法让{ID}工作。

谢谢

1 个答案:

答案 0 :(得分:1)

您的变量$in不在callback范围内。

<?php error_reporting(E_ALL);

$id = 123;

function callback($buffer)
{
    global $id;
    return strtr($buffer, ['{ID}' => $id]);
}

ob_start('callback');

echo 'Id value: {ID}';

http://php.net/manual/en/language.variables.scope.php