PHP - 创建动态编码的if语句

时间:2014-04-06 15:10:56

标签: php xml if-statement

我正在尝试构建一个if语句,该语句是根据访问该站点的用户提交的值动态编码的。 if语句可能有1到9个条件要测试(取决于用户输入),并且将根据if语句显示XML值(来自XML文档)。

可能的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循环中没有显示任何内容:

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

if ($if_statement) { // the problem lies here, because results ARE displayed when this if statement is removed
echo $Product->name;
}}

有什么建议吗?或者有更好的方法来动态编写if语句吗?

2 个答案:

答案 0 :(得分:1)

在有任何实际要评估的产品之前,会在运行时评估$ if_statement。您需要更改代码以在foreach循环期间传递产品,然后进行评估。

功能声明:

function if_statement($Product, $keyword=null, $store=null) {
    $if_statement=false;
    if($keyword)  $if_statement = ($keyword == $Product->keyword);
    if($store) $if_statement = $if_statement && ($shopByStore == $Product->store);
    return $if_statement;
}

功能评估

$keyword = trim($_GET["Keyword"]);
$shopByStore = $_GET["store"];

$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
    if (if_statement($Product,$keyword, $store )) {
        echo $Product->name;
    }
}
顺便说一下。看看PHP's native filter_input。您正在评估用户输入而不进行清理。

答案 1 :(得分:0)

$names = array('Keyword', 'store', ...);
$if_condition = true;
foreach ($names as $name) {
    if (isset($_GET[$name]))
        $if_condition = $if_condition && $_GET[$name] == $Product->$name;
}
if ($if_condition) {
...
}