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


PHP - a dynamically coded if statement to parse XML

我正在创建一个动态编码的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文件,因此我希望在foreach循环执行之前对if语句进行动态编码。由于if语句中测试的条件可能在1到9个之间(取决于有多少GET方法从用户输入中产生空变量),因此与在foreach循环的每个循环中测试空变量相比,系统只测试一次空变量(在执行foreach循环之前)似乎不那么费力。当只需要测试1或2个条件时,测试9个条件是浪费。

但很明显,因为$if_statement是在foreach循环执行之前构建的,这导致动态if语句代码的"Product->variable"部分未被求值。因此,在下面的foreach循环中没有显示任何内容:

$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
if ($if_statement) { // the problem lies here
echo $Product->name;
}}

有没有一种方法可以构建一个动态创建的if语句,在foreach循环执行之前解析XML?

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

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

你只需要在循环中做你的if语句,开销是可以忽略的。。。