PHP - 用于解析XML的动态编码if语句

时间:2014-04-08 23:26:42

标签: php xml dynamic-programming

我正在创建一个动态编码的if语句,该语句是根据站点访问者提交的值构建的。 if语句代码内置在$ if_statement变量中,如下所示:

$keyword = trim($_GET["Keyword"]);
if (!empty($keyword)) {
$if_statement = ($keyword == $Product->keyword);
}

$shopByStore = $_GET["store"];
if (!empty($shopByStore)) {
$if_statement = ($if_statement && $shopByStore == $Product->store);
}

// plus 7 more GET methods retrieving potential user input for the $if_statement variable.

这个if语句代码将用于解析foreach循环中的一个非常大的XML文件,所以我希望if语句在foreach循环执行之前被动态编码。由于在if语句中可以测试1到9个条件(取决于有多少GET方法从用户输入产生空变量),因此在系统上只测试一次空变量(在foreach之前)似乎不那么费劲循环执行)比在foreach循环的每个循环期间测试空变量。当仅需要测试1或2个条件时,测试9个条件是浪费。

但显然因为$ if_statement是在foreach循环执行之前构建的,这导致了' Product->变量'不评估动态if语句代码的一部分。因此,下面的foreach循环中没有显示任何内容:

$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {

if ($if_statement) { // the problem lies here
echo $Product->name;
}}

有没有办法构建一个动态创建的if语句来解析XML PRIOR到foreach循环执行?

1 个答案:

答案 0 :(得分:0)

不,如果您依赖于$ Product变量,则在访问它之前无法基于它创建语句。这应该非常简单。

if($Product->something) {}  //this is meaningless and will throw and error
//if you define $Product->something here

你只需要在循环中执行if_statement,并且开销是可以理解的......