qq_34556596 2022-11-30 14:53 采纳率: 33.3%
浏览 44
已结题

PHP中for循环中的类使用

数据库使用的是sqlserver2012,后端使用的是PHP,下面代码是全部代码,目前问题是第一个for循环里的class Yongdianliang往后的代码只能执行一遍,第二遍无法执行,请各位专家帮忙看下问题,多谢。目前执行出来的结果如下图,框框的位置有应该跟上面一样有日期和一系列数值的,但是出不来。
有不明白下面代码执行什么功能的,可以看下我之前的提问应该可以大概了解。

img

<?php
    error_reporting(0);
    // 指定允许被访问的域名
    header('Access-Control-Allow-Origin:*');  
    // 响应类型  
    header('Access-Control-Allow-Methods:*');  
    // 响应头设置  
    header('Access-Control-Allow-Headers:x-requested-with,content-type'); 
    
    header("content-type:text/html;charset=utf-8");
    $serverName = ""; //数据库服务器地址
    $connectionInfo=array("Database"=>"Test","ConnectionPooling"=>false,"CharacterSet"=>"UTF-8","TrustServerCertificate"=>"yes");
    $conn=sqlsrv_connect($serverName,$connectionInfo);
    if(!$conn)
    {
        die('连接失败: ' . sqlsrv_error($conn));
    }

    $keshidata = array(); 
       $sql1 = 'SELECT distinct keshi FROM T1';//sql查询语句
       $result1 = sqlsrv_query($conn,$sql1,array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
    
    //读科室列
    class Keshi{//声明一个Keshi类,它只含有一个属性 $keshi;
        public $keshi;
    }
    while($row1 = sqlsrv_fetch_array($result1,SQLSRV_FETCH_ASSOC)){
        $user1=new Keshi();
        $user1->keshi = $row1['keshi'];//-> 类中 用于引用类实例的方法和属性
        $keshidata[]=$user1;
    }
    $office = array_column($keshidata,'keshi');//返回输入数组中某个单一列的值,该处为筛选出的科室列的值。        
    
    for($i=0;$i<count($keshidata);$i++){
        $dushu=0;
        $haodianliang=0;
        $year=0;
        $keshi=$office[$i];
        print_r($keshi);            
        $sql3="select * from T1 where keshi='{$keshi}' order by keshi,banzu,time1 desc";//按科室从新到老排列数据库
        $result3 = sqlsrv_query($conn,$sql3,array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
        $totalRow=sqlsrv_num_rows($result3);//把总行数变量拿过来

        class Yongdianliang{
            public $time1;
            public $yongdianliang;
        }    
        while($row2 = sqlsrv_fetch_array($result3,SQLSRV_FETCH_ASSOC)){
            $user2=new Yongdianliang();
            $user2->time1 = $row2['time1'];
            $user2->yongdianliang = $row2['yongdianliang'];
            $yongdianliangdata[]=$user2;
        }
        $time = array_column($yongdianliangdata,'time1');//筛选出时间的列
        $electricity = array_column($yongdianliangdata,'yongdianliang');    //筛选出用电量的列
                
        for($j=0;$j<$totalRow;$j++){
            $dushu=$electricity[$j];
            print_r($dushu);
            $time1[$j]=strtotime($time[$j]);//strtotime用于把人类可读的字符串转换为 Unix 时间
            $nian='年';
            $year=date('Y',$time1[$j]);
            $year1=$year.$nian;
            print_r($year1);                        
        }
        
    }

  • 写回答

4条回答 默认 最新

  • Python小叮当 2022-11-30 15:14
    关注

    把 声明类的那个代码块放到 for 循环外面

    .
    .
    .
    $office = array_column($keshidata,'keshi');//返回输入数组中某个单一列的值,该处为筛选出的科室列的值。
    
    class Yongdianliang{
                public $time1;
                public $yongdianliang;
            }  
    for($i=0;$i<count($keshidata);$i++){
    .
    .
    .
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月3日
  • 赞助了问题酬金15元 11月30日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 vs code配置c语言遇到这个问题
  • ¥15 vscode调试编译找不到gcc,只有cl,但是检查cmd是对的,控制面板的路径也更改了
  • ¥15 FlycoRoundView引入失败
  • ¥20 access中怎么分割分别获取一下图中的值
  • ¥15 keras_tcn已经安装成功,还是显示ModuleNotFoundError: No module named 'keras_tcn'
  • ¥15 类图中关联与聚合的区别
  • ¥15 ENVI高分五号去除云层的方法
  • ¥15 16进制数据如何得到奇偶校验位
  • ¥15 求合并两个字节流VB6代码
  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?