计算非空变量

时间:2017-11-11 17:42:47

标签: php

我想为每个循环计算非NULL字符串。

$imgCount = 0;

foreach($ads as $ad) { // it return 3 $ad

if(!empty($ad["img1"])){
$imgCount += $imgCount + 1; // img1 has data
} else if(!empty($ad["img2"])){    
$imgCount += $imgCount + 1; // img2 has data
} else if(!empty($ad["img3"])){   
$imgCount += $imgCount + 1; // img3 is NULL
}

echo $imgCount;

}

但是它返回了错误的数字,所有img列类型都是NULL。它应返回2,如果all为NULL则返回0,如果所有数据都返回3$imgCount++也无效。

我做错了什么?

编辑示例

考虑$ad["img1"]有价值 $ad["img2"]具有价值 $ad["img1"]为NULL

它应该计为非null,并返回2.

修改:完整var_dump

array(3) {
  [0]=>
  array(3) {
    ["img1"]=>
    string(23) "2017-11-01_9773424337_1"
    ["img2"]=>
    NULL
    ["img3"]=>
    NULL
  }
  [1]=>
  array(3) {
    ["img1"]=>
    string(23) "2017-11-11_1082077846_1"
    ["img2"]=>
    NULL
    ["img3"]=>
    NULL
  }
  [2]=>
  array(3) {
    ["img1"]=>
    string(23) "2017-11-11_4665330406_1"
    ["img2"]=>
    string(23) "2017-11-11_4665330406_2"
    ["img3"]=>
    string(23) "2017-11-11_4665330406_3"
  }
}

4 个答案:

答案 0 :(得分:0)

您正在将图像计数的值添加到自身,然后添加1,这会给您错误的结果。

试试这个,我甚至对代码进行了优化:

$imgCount = 0;

foreach( $ads as $key => $ad ) {

        if( substr( $key, 0, 3 ) !== "img" ) {

            continue;

        }

        if( !empty( $ad ) ) {

            $imgCount++;

        }

}

答案 1 :(得分:0)

当你真正想要执行所有三个时,你正在使用if..else if..else if,而不仅仅是第一个匹配的。您将变量添加到自身的注释也是正确的。 要获得更符合原始代码的解决方案,请尝试:

if(!empty($ad["img1"])){
  $imgCount += 1; // img1 has data
}
if(!empty($ad["img2"])){    
  $imgCount += 1; // img2 has data
}
if(!empty($ad["img3"])){   
  $imgCount += 1; // img3 is NULL
}

答案 2 :(得分:0)

Jesse有正确的逻辑,但可以以更简单的方式完成。你可以有单循环。

参见示例测试代码。

$ads = array(
    'img1'=> 'Sample01',
    'img2'=> 'Sample02',
    'img3'=> null,
);

$imgCount = 0;

foreach( $ads as $key => $ad ) {
    if( substr( $key, 0, 3 ) !== "img" ) {
        continue;
    }
    if( !empty( $ad ) ) {
        $imgCount++;
    }

}

echo $imgCount;

答案 3 :(得分:0)

$imgCount = 0;

foreach($ads as $ad) { 

    if(!empty($ad["img1"])){
        $imgCount++;
    } 
    if(!empty($ad["img2"])){    
        $imgCount++;
    } 
    if(!empty($ad["img3"])){   
        $imgCount++;
    } 

echo $imgCount;

}

或者,如果你想在每个循环上引用$ imgCount值,那么你可以尝试另一个代码:

foreach($ads as $ad) { 
    $imgCount = 0; //put $imgCount inside the loop to refresh the counter to 0 again.

    if(!empty($ad["img1"])){
        $imgCount++;
    } 
    if(!empty($ad["img2"])){    
        $imgCount++;
    } 
    if(!empty($ad["img3"])){   
        $imgCount++;
    } 

    echo $imgCount;

}