2013-12-16 85 views
0

我正在从一个文件加载一个变量,然后我需要根据页面变量上的另一个回显变量。下面是代码在变量中回应一个变量

<?php 
ob_start(); 
include 'states-desc/before_after_table_description.php'; 
ob_end_clean(); 
echo $alabama_after; 
?> 

现在,我需要$ state_name_after更换回声$ alabama_after

好的,所以当已经加载在首页的变量是$ state_name。那个州的名字就是佛罗里达州。当我放弃$ state_name_before;我需要变量变成$ florida_before并且回显包含文件变量$ florida_before;的内容。

如果有什么办法可以在变量中放一个变量名?

+1

'我需要$ state_name_after.'更换回声$ alabama_after - 什么你的意思是? –

+2

我认为他希望'$ {“state _ {$ name} _after”}' –

+0

在旁注上。我不知道你的包含什么样子或你的通用代码结构,但你几乎可以肯定能够做事更容易通过把你的状态放在某种数组结构中,而不是为状态单独设置硬编码变量。 –

回答

2

您是否在寻找类似eval()的产品?

+1

尽管这可能解决了直接的问题,但我尽量避免使用'eval';它会在你的代码中打开一些非常危险的安全漏洞。 – andrewsi

2

可能您需要“变量变量”。

我用PHP 5.3.26测试了以下内容。

文件i.php:

<?php 
$alabama_after = "montgomery"; 

文件p.php:

<?php 

ob_start(); 
include "i.php"; 
ob_clean(); 

$state_name = "alabama"; 

$state_name_after = "{$state_name}_after"; 

// the following two echo the same thing: 
echo $alabama_after . "\n"; 
echo $$state_name_after . "\n"; 

输出:

$ php p.php 
montgomery 
montgomery 

参见http://www.php.net/manual/en/language.variables.variable.php


但是,我想知道为什么当你可以使用关联数组时使用这种方法。例如,i.php看起来是这样的:

<?php 
$after_data = array(
    "alabama" => "montgomery" 
); 

而且p.php看起来是这样的:

<?php 

ob_start(); 
include "i.php"; 
ob_clean(); 

$state_name = "alabama"; 

$state_name_after = $after_data[$state_name]; 

echo $state_name_after . "\n"; 
+0

谢谢。我尝试过,但出于某种原因,当我做'$ state_name'时,我得到'alabama'。当我做'$ alabama_after'时,我从包含文件中获取文本,但'$$ state_name_after'不会回显我需要的变量。它只是页面中的空白区域,没有错误,即使在运行'$ state_name_after =“{$ state_name} _after”;'之前。奇怪的 – Roger

+0

我测试它确定。请参阅上面的编辑。我还建议另一种组织数据的方法。 –

+0

再次感谢。我仍然得到一个空白页面,回声没有错误。我不确定是否需要更改php设置中的某些内容。我打算把这些数据放在数据库中。顺便说一句,我正在使用这种方法,因为我很熟悉编辑包含并格式化它,而不必每次都去DB。我没有建立一个管理区域进行编辑,因为数据在那里暂时保持不变。 – Roger