1

我正在使用以下

if (!empty($data['var_1']) 
 && !empty($data['var_2']) 
 && !empty($data['var_3']) 
 && !empty($data['var_4'])
 && !empty($data['var_5']) 
 && !empty($data['var_6']) 
 && !empty($data['var_7']) 
 && !empty($data['var_8']) 
 && !empty($data['var_9'])) {
//BLOCK HERE
}

基本上,我想要实现的是如果所有变量都为空,则隐藏块。如果 8 个或更少为空,则显示该块。

我哪里错了?

4

7 回答 7

1

||不想&&。只有当它们都不为空时,才会显示该块。不过,我认为可能有更好的方法来做到这一点,比如array_filter.

于 2012-10-01T12:56:10.643 回答
1

好吧,你可以只使用一个循环和一个$isok变量:

$isok = false;
for($i=1; $i<10; $i++) {
    if( !empty($data['var_'.$i])) {
        $isok = true;
        break; // no need to continue looping
    }
}
if( $isok) {
    // BLOCK HERE
}

这也更容易编辑,以防您更改var_零件或想要不同的数字范围。

于 2012-10-01T12:57:27.350 回答
1

你也可以试试

$data = array_filter($data); // remove all empty value form array

if (count($data)) {
    // do your thing
}
于 2012-10-01T12:59:41.897 回答
0

如果所有变量都不为空,您编写的代码将显示该块。如果您希望在任何变量不为空时显示它,请使用 OR 而不是 AND 通过替换&&by ||

<?php
if (!empty($data['var_1']) || !empty($data['var_2']) || !empty($data['var_3']) || !empty($data['var_4']) || !empty($data['var_5']) || !empty($data['var_6']) || !empty($data['var_7']) || !empty($data['var_8']) || !empty($data['var_9'])) {
    //BLOCK HERE
}
于 2012-10-01T12:56:29.377 回答
0

您可以为此使用array_values()

if ( count(array_values($data)) ) {
    //BLOCK HERE
}
于 2012-10-01T12:59:49.640 回答
0

将 && (AND) 替换为 || (或者)

if (!empty($data['var_1']) 
 || !empty($data['var_2']) 
 || !empty($data['var_3']) 
 || !empty($data['var_4'])
 || !empty($data['var_5']) 
 || !empty($data['var_6']) 
 || !empty($data['var_7']) 
 || !empty($data['var_8']) 
 || !empty($data['var_9'])) {
//BLOCK HERE
}
于 2012-10-01T13:03:31.370 回答
0
if (empty(array_values($data))) { /* will return you true if all variables are empty*/}
于 2012-10-01T13:10:21.007 回答