我想为每个循环计算非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"
}
}
答案 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;
}