[英]How do I clean up this if/else statement? (refactoring)
我知道必须有一个更好的方法来做到这一点,但每当我搜索“&&”我没有得到足够好的结果...
<?php
if (empty($row[ContactName]) && empty($row[ContactEmail]) && empty($row[ContactPhone]) && empty($row[Website])){
echo "Not Provided";
}
else{
...do stuff...
}
?>
谢谢!
原始代码有什么问题?
<?php
if (empty($row[ContactName])
&& empty($row[ContactEmail])
&& empty($row[ContactPhone])
&& empty($row[Website]))
{
echo "Not Provided";
}
else{
...do stuff...
}
?>
对我来说看起来很好的代码......
<?php
$i=1;
$ar=array('ContactName','ContactEmail','ContactPhone','Website')
foreach($ar as $a)
if (empty($row[$a]))
{
$i=0;
break; //to make code fast
}
if($i) //do stuff
else echo 'not provided';
?>
或者如果你真的想让你的代码变得更小,那么在数据库中更改你的列名
From To
ContactName Col1
ContactEmail Col2
ContactPhone Col3
Website Col4
然后呢
<?php
$i=1;
for($a=1;$a<5;$a++)
if (empty($row['Col'.$a]))
{
$i=0;
break;
}
if($i)//do stuff
else echo 'Not Provided';
?>
但是重命名列并不好,因为它会使您的数据库不太容易理解。
如果紧凑性比可读性更重要,你可以把它做得这么短:)
$required = array('ContactName', 'ContactEmail', 'ContactPhone', 'Website');
$ra = array_filter(array_intersect_key($row,array_flip($required)));
if(empty($ra)){
echo "Not Provided";
}
else{
//....
}
你不能把array_filter放在empty()中,或者你得到“致命错误:在写上下文中不能使用函数返回值”
1)数组翻转将您需要的$值转换为键
2)array_intersect_key抛弃$ required中找不到的任何$ row键
3)array_filter抛弃任何空值
留下零长度数组,这是空的。 无需担心数组长度或循环
由于php函数有很多不一致性,因此使用库使其更加一致总是一个好主意。
把这个函数放在那个库中:
function empty()
{
foreach(func_get_args() as $arg) if (empty($arg)) return false;
return true;
}
用法:
if (empty($row[ContactName], $row[ContactEmail], $row[ContactPhone], $row[Website])) {
echo "Not Provided";
}
<?php
$flag = 1;
if (empty($row[ContactName])){
$flag = 0;
}
if (empty($row[ContactEmail])){
$flag = 0;
}
if (empty($row[ContactPhone])){
$flag = 0;
}
if (empty($row[Website])){
$flag = 0;
}
if($flag == 0){
echo "Not Provided";
}else{
//do stuff
}
?>
要么
$flag = 1;
$i=0;
$mustarray = array('ContactName','ContactName','ContactName','ContactName'); //or any number of fields that you want as mandatory
foreach($yourresult as $row){
if(empty($row[$mustarray [$i]])){
$flag = 0;
}
$i++;
}
if($flag == 0){
echo "Not Provided";
}else{
//do stuff
}
不要只是为了使代码看起来更好而制作数组和东西。 正如汤米指出的那样
<?php
if (empty($row[ContactName])
&& empty($row[ContactEmail])
&& empty($row[ContactPhone])
&& empty($row[Website]))
{
echo "Not Provided";
}
else{
...do stuff...
}
?>
这段代码很好,只需要像他指出的那样正确格式化。 制作数组然后启动循环会降低性能
<?php
$i=1;
for($a=1;$a<5;$a++)
if (empty($row['Col'.$a]))
{
$i=0;
break;
}
if($i)//do stuff
?>
这可能看起来很小,很好并且“专业”,但是有更多操作可以提供与简单if指令相同的结果。 不是说它不能更快完成,我不知道php,只记得代码执行速度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.