如何创建一个考虑空变量的字符串?

时间:2011-06-28 12:01:54

标签: php variables if-statement

我正在尝试为网页构建占位符元描述,以防用户未在CMS中添加说明。

我已经开始使用以下代码,但当然如果其他任何变量都为空,它也会失败,例如$phone$location['zip']等等。

<?php   
if (!empty($description)) {
    echo '<meta name="description" content="' .$description . '">';
}
else {
    // Should return: Apple is a business located in Palo Alto, 95014. Call 408.996.1010...
    $description = $name . ' is a ' . strtolower($category) . ' located in ' . $location['city']  . ', ';
    $description .= $location['zip'] . '. Call ' . $phone . ' for more details today.';
    echo '<meta name="description" content="' . $description . '">';        
} ?>

以这种方式构建描述的最有效方法是什么?目前我只能想到嵌套的if语句听起来很乱,我敢肯定必须有一个干净的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

添加一个函数来检查是否设置了值?

function checkData($data) {
   if(!empty($data)) {
      return $data;
   } else {
     return '';
   }
}

$description = checkData($name) . ' is a ' . strtolower(checkData($category)) . ' located in ' . checkData($location['city'])  . ', ';

答案 1 :(得分:0)

由于描述是根据输入而变化的,所以将它放入它自己的函数或类中以封装它:

/**
 * build a description based on various input variables
 * @return string
 */
function build_description($description, $name, $category, array location, $phone) {
   // build the description as you see fit.
}

$description = build_description(compact('description', 'name', 'category'));
$metaDescription = sprintf('<meta name="description" content="%s"', htmlspecialchars($description));

完成后,build_description中的具体实现可以包含许多复杂的语句,而程序的其余部分可以像处理它一样简单处理它。

但是,这并没有回答你如何在该函数内编码。但由于该函数输出的数据在很大程度上取决于该函数的输入,因此您只能处理参数所施加的所有方面。

答案 2 :(得分:0)

定义的其他变量不应该是字符串,而应该是对象的一部分,例如......描述。 在这种情况下,调用一个Description-&gt; isEmpty()会更容易,如果其中一个变量为空,则返回true。

如果您遇到此配置,您仍然可以创建一个数组: $ myArray = array($ name,$ category,...); 并检查一个循环或者返回in_array('',$ myArray)