5

我知道必须有更好的方法来做到这一点,但是每当我搜索“&&”时,我都没有得到足够好的结果......

<?php
if (empty($row[ContactName]) && empty($row[ContactEmail]) && empty($row[ContactPhone]) && empty($row[Website])){
echo "Not Provided";
}
else{
...do stuff...
}
?>

谢谢!

4

6 回答 6

6

原始代码有什么问题?

<?php
if (empty($row[ContactName]) 
    && empty($row[ContactEmail]) 
    && empty($row[ContactPhone]) 
    && empty($row[Website]))
{
    echo "Not Provided";
} 
else{
 ...do stuff...
}
?>

对我来说看起来像很好的代码......

于 2012-07-18T05:56:08.613 回答
5
<?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';
    ?>

但是,重命名列并不好,因为它会使您的数据库不太容易理解。

于 2012-07-18T05:47:15.367 回答
1

如果紧凑性比可读性更重要,你可以把它写得这么短:)

$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) 数组翻转正在将您的 $required 值转换为键2) array_intersect_key 丢弃
在 $required 中找不到的任何 $row 键3) array_filter 丢弃任何空值

给你一个零长度的数组,它是空的。无需担心数组长度或循环

于 2012-07-18T06:20:46.773 回答
1

由于 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";
}
于 2012-07-18T06:46:11.827 回答
0
<?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
    }  
于 2012-07-18T05:49:32.037 回答
0

不要为了让代码看起来更漂亮而制作数组和其他东西。正如汤米指出的那样

<?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不是很了解,只记得代码执行速度。

于 2012-07-18T07:10:00.677 回答