是否可以将PHP语法存储在变量中供以后使用和重复,如下所示:
$ifStart = "if(";
$ifEnd = "){ echo 'Test'; }";
$ifStart 'A' == 'B' $ifEnd;
编辑:我想要完成的是:
我有3个表单字段,加载PHP脚本时,可以设置三个中的任何一个。没有可以设置,两个,一个......所以我需要一些方法来确定设置了多少以及根据它设置了什么。这就是原因。
编辑:是的,所以我有一个HTML Select和两个文本输入字段。我的脚本检查这些字段是否已设置(isset)并相应地执行一些代码,将信息放入数组等。但我现在要做的是检查变量是否已经逐个设置,这样我就可以输出正确的我存储在数组中的结果。
新编辑:这显然很难解释。但想象一下搜索引擎,您可以在其中决定要填写哪些字段,然后脚本会检查哪些字段已设置并在数组中循环显示所有结果,只收集带有与所请求搜索相对应的子元素的元素,这就是我想要实现的目标。
这是在POST中选择/设置了AGE和COUNTY的数组设计(因此没有[city]元素的原因:
Array
( [1] =>排列 ( [id] => 1 [age] => 19 [county] => 4353 )
[2] => Array
(
[id] => 2
[age] => 20
[county] => 4020
)
[3] => Array
(
[id] => 3
[age] => 30
[county] => 4020
)
)
仍然试图找出如何根据-its-内容选择特定的数组元素。例如,我有一个这样的数组:
数组(1:[年龄] [县],2:[年龄] [县],3:[年龄],4:[县],5:[年龄] [县])
然后我想只选择包含年龄和县的ID,在本例中为ID 1,2和5。
编辑:它类似于SQL查询:WHERE年龄和县,只有这是一个数组
答案 0 :(得分:2)
一个干净的方法(干净因为它避免了eval())来做相对动态的代码就是存储一个函数名,或者在php 5.3之后存储一个函数引用。
E.g。类似的东西:
$callback = "truth_check";
$condition_result = ($a == $b);
if(is_callable($callback)){
$callback($condition_result);
}
请在此处查看正在运行的示例:http://ideone.com/1SBYS
在您的情况下,回调可能是运行的结果,例如“print_message_on_true_input”作为一些比较函数,输入可能是代码中任何地方的条件测试结果,例如: $ print =(false || $ a == $ b);
给出您的特定用例,因为90%的时间预期行为可以更少地实现而根本不需要任何动态代码。
答案 1 :(得分:2)
有可能......
<强> BUT 强>
如果你必须这样做,你的设计肯定有问题!
[编辑后编辑] 你的编辑告诉我,我是对的。你想要做的事情,可以用更好的方式完成!
因此,如果我理解正确,您希望根据用户填写/回答的表单字段来更改输出。到目前为止,您将$ _POST数组中的一些值存储在另一个数组中。为了生成输出,最好循环遍历该数组并连接字符串,具体取决于已填充的内容。
foreach ($myArray as $formField => $value)
{
//do something for each $formField, depending on the $value
}
如果仍然让你感到困惑,请在这里发表评论。
您编写它的方式不起作用,您需要使用eval()
。在大多数情况下使用eval()
是不好的做法。这不是主要问题,但主要问题是,这些代码难以阅读,难以调试以及维护且难以记录。总而言之,这是不好的做法,会导致糟糕的解决方案和更多的问题。
答案 2 :(得分:0)
有可能吗?是的,使用eval
。
你应该这样做吗?不,不,不,请不要。
答案 3 :(得分:0)
没有。您可以改用函数。
function my_compare($a, $b, $symbol = '==') { eval('$result = $a ' . $symbol . ' $b;'); if ($result) echo 'Test'; } // ... my_compare('A', 'B');
答案 4 :(得分:0)
请记住上面的评论警告你这个想法!
但你可能会这样做:
$ifStart = "if(";
$ifEnd = "){ echo 'Test'; }";
eval( " {$ifStart} 'A' == 'B' {$ifEnd} " );
答案 5 :(得分:0)
好的,所以你需要的东西与原始问题中涉及的动态代码关系不大,所以我将重新开始并提出一个完全不同的方法:
//INITIALIZE
//get your input variables, defaulting to null
$inputs = array('select'=>@$_REQUEST['select_name'], 'input1'=>@$_REQUEST['input_1_name'], 'input2'=>@$_REQUEST['input_2_name']);
// initialize your output variables
$out1 = $out2 = $out3 = null;
//MANIPULATIONS
//perform actions based on the presence of variables in the array
if($inputs['select'] == 'whatever'){
$out1 = 'select was '.htmlentities($inputs['select']);
}
// .... perform more manipulations, setting output strings ...
// OUTPUT SECTION
echo $out1.$out2.$out3;