iT邦幫忙

1

[php] 2維陣列

大家好:
想請問14X19的陣列,將值比對到陣列中..

以下echo出來的值是正確的,但寫入陣列結束後,我再輸出一次確認陣列的值,卻只有資料庫篩出來的最後一筆資料有寫入到陣列..想問是甚麼原因?
謝謝

A程式: B程式跑完再確認一次,錯誤
2/0:課名null
3/0:課名null
4/0:課名null
6/0:課名null
6/14:課名光電半導體元件/EC6025-1
7/0:課名null
7/14:課名光電半導體元件/EC6025-1
8/0:課名null
8/14:課名光電半導體元件/EC6025-1

for($i=0;$i<14;$i++){ //14節
    for($t=0;$t<$roonum;$t++)
    {
       echo $i."/".$t.$infoutput[$i][$t]."<br>";
     }
 }

B程式,echo的值是正確
2/0:課名微積分(一)/EC2017
3/0:課名微積分(一)/EC2017
4/0:課名微積分(一)/EC2017
6/0:課名電力/EC2017
6/14:課名光電半導體元件/EC6025-1
7/0:課名電力/EC2017
7/14:課名光電半導體元件/EC6025-1
8/0:課名電力/EC2017
8/14:課名光電半導體元件/EC6025-1


        $infoutput=array();
        $datecourse = course::select('cname','classroom','classtime','pname','uuser')->where('starttime','<=',$weekday[0])->where('endtime','>=',$weekday[0])->where('weekday', $weekdaych);


        if($datecourse->exists())
        {  
          for($i=0;$i<14;$i++)
          { //14節
              for($t=0;$t<$roonum;$t++)
              {
                  $output=$datecourse->get();
                  foreach ($output as $user)
                 {   
                     $coursename=$user->cname;
                    
                     if(strpos($ttime,(string)$i)!==false && strpos($room,$inforoom[$t])!==false)
                     {  
                        echo $infoutput[$i][$t]=$coursename;
                     }
                     else //問題再這邊只要拿掉就正常了..但我拿去前端輸出$infoutput還需要判斷有沒有值
                     { 
                       $infoutput[$i][$t]="null";
                     }
                 }
              }
          }
        }
        else{
        
           for($i=0;$i<14;$i++){ //14節

              for($t=0;$t<$roonum;$t++)
              {
                $infoutput[$i][$t]="null";
              }
           }
        }
迷路 iT邦新手 5 級 ‧ 2021-07-23 08:15:17 檢舉
下面那段讀資料的部分感覺怪怪的
在迴圈的最內層讀陣列資料,還不帶入任何迴圈參數
雖然沒看懂讀資料的部分,但直覺有問題

1 個回答

0
japhenchen
iT邦大師 1 級 ‧ 2021-07-23 13:08:52
最佳解答

怎麼看怎麼怪,下面的程式並不會幫你把$coursename代進去$infooutput啊(你的$infooutput怎麼會寫成 $infoutput ? 少了一個o ? 而且在輸入裡寫等號,不會賦值啦

if(strpos($ttime,(string)$i)!==false && strpos($room,$inforoom[$t])!==false)
{  
echo $infoutput[$i][$t]=$coursename;
}
mayyola iT邦研究生 5 級 ‧ 2021-07-23 14:29:06 檢舉

j大您好,我有作修正,不知道正規要如何表示變數寫入2維陣列,但可以輸出值,但要判斷索引後是否有值

$infoutput[$i][$t]=$coursename; 
  if($datecourse->exists())
      {

       $output=$datecourse->get();
       foreach ($output as $user)
          {   
              $ttime=$user->classtime;
              $room=$user->classroom;
              $pname=$user->pname;
              $coursename=$user->cname;
              $timenum=str_split($ttime); //例如567節,分三段 
              foreach($timenum as $num){
              $i= array_search($num,$section);/*課表堂數*/
              $j = array_search($room,$roomid); /*教室編號比對*/
              $infoutput[$i][$j]=$coursename; //我不知道這種要怎麼表示寫到2維陣列
                     }
             }
         }

以陣列的看法,用
array_push($classrow , '課名光電半導體元件/EC6025-1');
............以此類推
array_push($infooutput , $classrow);
這樣也能串起二維陣列
不然你$infoutput[$i][$j]=$coursename;也是可以,就是混合陣列,在python的世界裡,叫字典...$i跟$j就是key

混合陣列也叫具名陣列或字典,但會有個缺陷
你如果
$classinfo[1] = "a";
$classinfo[3] = "xxx";
$classinfo[4] = "yyy";
之後下
echo $classinfo[2] ;
就會沒東西(null)

我要發表回答

立即登入回答