我如何得到这个或纠正这个PHP逻辑工作

时间:2010-10-04 14:32:27

标签: php

我正在使用调用存储过程的数据创建一个报告,该过程返回 各部分(1,2,3,4,5,6),每个部分都有数据。现在这些部分可能包含或可能 不包含数据。这就是我如何改变我的逻辑

 foreach($this->$dbresults as $row){
$var1 ='';
 If($var1!=$row['section']){
switch($row['section']){
case '1':echo "some thing data";
     break;
case '2':echo "some thing data";
     break;
case '3':echo "some thing data";
     break;
case '4':echo "some thing data";
     break;
case '5':echo "some thing data";
     break;
case '6':echo "some thing data";
     break;
}
  } 

$var1=$row['section']
}

所以这里我的问题是如果该部分中的任何一个不存在那么该部分情况不能被执行   。我的意思是即使没有从数据库返回该部分,我如何执行该部分

5 个答案:

答案 0 :(得分:1)

switch($x){
    case '1':
        echo "some thing 1";
        break;
    case '2':
        echo "some thing 2";
       break;
    case 'N':
        echo "some thing N";
       break;
    default:
        echo "some thing else";
} 

答案 1 :(得分:1)

我猜你已按部分订购结果了。如果您的部分真的是1-n,您可以将switch()代码放入一些runsections函数中并执行此操作:

$var1=0; $lastsection=16;
foreach($this->dbresults as $row) {
  If($var1!=$row['section']){
    for($num=$var1+1; $num<$row['section']; $num++) runsections($num);
    runsections($row['section']);
  }
  $var1=$row['section'];
}
for($num=$var1+1;$num<=$lastsection;$num++) runsections($num);

如果您的部分不是连续数字,您可以创建一个数组并检查它们是否已全部执行

$sections=array('a'=>0,'b'=>0,'c'=>0,'d'=>0,'e'=>0);
If($var1!=$row['section']){
    unset($sections[$row['section']]);
    runsection($row['section']);
}
...
}
foreach($sections as $num) {
    runsection($num);
}

编辑:所以runsections()函数如下所示:

function runsections($section) {
    switch($section){
    case '1':echo "some thing data";
         break;
    case '2':echo "some thing data";
         break;
    case '3':echo "some thing data";
         break;
    case '4':echo "some thing data";
         break;
    case '5':echo "some thing data";
         break;
    case '6':echo "some thing data";
         break;
    }
}

答案 2 :(得分:0)

在您的最后一个案例之后,插入:

default: echo "some error";

break是可选的,因为它是switch语句中的最后一种情况。此外,如果您正在寻找数字选项,单引号也是可选的。

case 1: echo "something";
        break;

答案 3 :(得分:0)

也许我并不完全明白你想要什么。以下代码应在以下条件下工作:

你总是想要显示6     具有DB数据或     非DB数据。

您无需显示相同内容     多次。

$sections = range(1, 6);
foreach($sections as $sectionNum) {
    $sectionNum = (string) $sectionNum;
    $foundSection = false;
    foreach($this->dbresults as $row) {
        if ($row['section'] == $sectionNum) {
            echo "section #$sectionNum has DB data: " . $row['data'];
            $foundSection = true;
            break;
        }
    }
    if (!$foundSection) {
            echo "section #$sectionNum does not have DB data.";
    }
}

答案 4 :(得分:0)

这就是我所拥有的:

foreach($this->dbresults as $row){
    if(isset($row['section'])){
        switch($row['section']){
            case '1':echo "some thing data";
                break;
            case '2':echo "some thing data";
                break;
            case '3':echo "some thing data";
                break;
            case '4':echo "some thing data";
                break;
            case '5':echo "some thing data";
                break;
            case '6':echo "some thing data";
                break;
            default:echo "some thing data";
                break;
        }
    } else {
        //Do something since no section data was stored
    }
}

我添加了一个默认案例,修复了小的php错误($ this-&gt; $ dbresults已更改,使用isset而不是!='')并在if中添加了一个else,如果该部分不是找到。