繁体   English   中英

我如何获得或纠正此PHP逻辑

[英]How do i get this or correct this PHP logic Working

我正在创建一个包含存储过程的数据的报告,该过程将返回各节(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']
}

所以这是我的问题,如果不存在任何部分,则无法执行该部分的情况。我的意思是即使该部分没有从数据库中返回,如何执行该部分

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-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;
    }
}

在您的最后一种情况之后,插入:

default: echo "some error";

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

case 1: echo "something";
        break;

也许我不太了解您想要什么。 以下代码应在以下情况下工作:

您始终希望显示包含DB数据或非DB数据的6个部分。

您无需多次显示同一部分。

$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.";
    }
}

这是我得到的:

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错误(使用isset而不是!=''更改了$ this-> $ dbresults,并在未找到该部分的情况下向其添加了else。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM