我试图用PHP中的if(!empty)
函数来修饰一些代码,但我不知道如何将它应用于多个变量,当它们不是一个数组时(就像我之前必须做的那样)所以如果我有:
$vFoo = $item[1];
$vSomeValue = $item[2];
$vAnother = $item[3];
然后我想只在有值时才打印结果。这适用于一个变量,所以你有:
if (!empty($vFoo)) {
$result .= "<li>$vFoo</li>";
}
我尝试了一些类似的东西
if(!empty($vFoo,$vSomeValue,$vAnother) {
$result .= "<li>$vFoo</li>"
$result .= "<li>$vSomeValue</li>"
$result .= "<li>$vAnother</li>"
}
但是,当然,它不起作用。
你可以创建一个新的包装器函数,它接受多个参数并通过empty()传递每个参数。它的工作方式类似于isset(),仅当所有参数都为空时返回true,并在到达第一个非空参数时返回false。这是我想出来的,它在我的测试中起作用。
function mempty()
{
foreach(func_get_args() as $arg)
if(empty($arg))
continue;
else
return false;
return true;
}
旁注:“mempty”中的前导“m”代表“多重”。您可以随意调用它,但这似乎是最短/最简单的命名方式。除此之外......说起来很有趣。 :)
更新10/10/13:我应该添加,不像empty()或isset(),如果你传递一个未定义的变量或一个不存在的数组索引,这个mempty()函数将哭泣血腥谋杀。
我不是百分百肯定我明白你要做什么,但这里有几个可能的答案:
这将仅在不为空时返回每个变量:
function printIfNotEmpty($var) {
if (!empty($var)) {
return '<li>' . $var . '</var>';
}
return '';
}
$result .= printIfNotEmpty($vFoo);
$result .= printIfNotEmpty($vSomeValue);
$result .= printIfNotEmpty($vAnother);
或者如果它们都不为空,这个将添加所有三个:
if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
$result .= '<li>' . $vFoo . '</li>';
$result .= '<li>' . $vSomeValue . '</li>';
$result .= '<li>' . $vAnother . '</li>';
}
伙计们,非常感谢您的所有回复,我根据所有可能的答案创建了一个脚本,这实际上帮助我学习PHP的语法,这是我的大多数错误背后的原因:)所以这里是
$vNArray ['Brandon'] = $item[3];
$vNArray['Smith']= $item[4];
$vNArray ['Johnson']= $item[5];
$vNArray ['Murphy']= $item[6];
$vNArray ['Lepsky']= $item[7];
foreach ($vNArray as $key => $value){
if(!empty($value)){
$result .= "\t\t\t\t<li><strong>$key</strong>" .$value. "</li>\n";
}
我现在只需要弄清楚如何使这些不同。那么我可以通过以下方式访问每一个吗?
$result .= "\t\t\t\t<li><strong>$key[0]</strong>" .$value. "</li>\n";
$result .= "\t\t\t\t<li><a href="thislink.com">$key[3]</a>" .$value. "</li>\n";
多谢你们!
为什么不这样:
foreach(array_filter($input_array) as $key => $value) {
// do something with $key and $value
}
仅供记录:array_reduce也适用。
if (!array_reduce($item, function($prev_result,$next) {
return $prev_result || empty($next); // $prev_result will be initial null=false
})) {
// do your stuff
}
如果只使用字符串,您可以尝试以下方法:
if(empty($str1.$str2.$str3)){ /* ... */ }
注意,empty(0)将返回true,而empty('0'。'0')和empty('0')则不会返回true。
你需要写一个条件链。使用&&
测试多个变量,每个变量都有自己的empty()
测试:
if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
但是您可能希望将其拆分为三个ifs,因此您可以单独应用额外的文本:
if (!empty($vFoo)) {
$result .= "<li>$vFoo</li>";
}
if (!empty($vSomeValue)) {
$result .= "<li>$vSomeValue</li>";
}
if (!empty($vAnother)) {
empty()
只能接受一个论点。另一方面,isset()
可以接受多个;当且仅当设置了所有参数时,它才会返回true。但是,这只会检查它们是否已设置,而不是它们是否为空,所以如果你需要专门排除空字符串,那么你将不得不做kelloti建议的那样做。
使用布尔/逻辑运算符:
if (!empty($vFoo) && !empty($vSomeValue) && !empty($vAnother)) {
$result .= "<li>$vFoo</li>"
...
}
此外,您可能希望使用or
而不是and
加入这些。如您所见,这可以为您提供相当大的灵活性。
节省一些打字并将其放入循环...
foreach (array('vFoo','vSomeValue','vAnother') as $varname) {
if (!empty($$varname)) $result .= '<li>'.$$varname.'</li>';
}
我使用此函数作为isset的替代。它比@imkingdavid的更简单,如果所有参数(变量)都不为空,则返回true,或者在第一个空值后返回false。
function isNotEmpty() {
foreach (func_get_args() as $val) {
if (empty($val)) {
return false;
}
}
return true;
}
正如其他人所说,empty()
只有一个参数,所以你必须使用类似的东西
if(!empty($v1) && !(empty($v2) ...)
但是if (!empty($v))
和if($v)
是一样的,所以你也可以使用:
if ($v1 && $v2 ...)
为什么不循环遍历$ item数组
foreach($item as $v) {
if(!empty($v))) {
$result .= "<li>$v</li>";
}
}
您还可以验证密钥索引值
foreach($item as $key => $value) {
if($key == 'vFoo') {
if(!empty($value))) {
$result .= "<li>$value</li>";
}
}
// would add other keys to check here
}
对于empty()与isset()
$zero = array(0, "0");
foreach($zero as $z) {
echo "\nempty(): $z ";
var_dump($z);
var_dump(empty($z)); // Will return true as in it's empty
echo "isset(): $z ";
var_dump(isset($z)); // will return true as it has value
}
输出:
empty(): 0 int(0)
bool(true)
isset(): 0 bool(true)
empty(): 0 string(1) "0"
bool(true)
isset(): 0 bool(true)
刚刚加入imkingdavid的帖子;
要在任何参数为空时返回TRUE
,请查看以下内容。
function mempty(...$arguments)
{
foreach($arguments as $argument) {
if(empty($argument)) {
return true;
}
}
return false;
}
这更接近isset()
如何工作,并且如果支持可变长度的参数,我期望empty()
如何工作。这也将与empty()
的工作原理保持一致,如果一切都不为空,它将返回FALSE
。
如果提供了多个参数,则只有在设置了所有参数后,isset()才会返回TRUE。评估从左到右进行,一旦遇到未设置的变量就停止。