此代码的另一种方法是什么


what is the other method for this code?

我有以下代码。我有一个月份数组。

         $m="";
         $months = array(1=>'January',2=>'February',3=>'March',4=>'April',5=>'May',6=>'June',7=>'July',8=>'August',9=>'September',10=>'October',11=>'November',12=>'December');
         foreach($objhst_fees->fetch_hst_fees("`month`,`fees`","where `grno`='".$stu_name['grno']."'")as $count_month)
          { 
                           //value like:$count_month['month']=1,2,3
            $m  .= $count_month['month'].",";
          }

所以假设$m=1,2,3,4,5,
然后,我分解它并创建数组。

          $paid_month = explode(",",$m);
          $arr=array();
          foreach($paid_month as $key=>$p)
          {
            array_push($arr,$p);
          } 

然后,我打印不在$arr中的月份名称。

          foreach($months as $key=>$a)
          {
             if(!in_array($key,$arr))
             {
                echo $a.",";
                //echo $months[$key];
             }
           }

但我认为,这种方法是渴望 it.so 这样做的替代方案是什么?

在代码中:

foreach($objhst_fees->fetch_hst_fees("`month`,`fees`","where `grno`='".$stu_name['grno']."'")as $count_month) { 
   //value like:$count_month['month']=1,2,3
   $m  .= $count_month['month'].",";
}

您可以更改:

$m  .= $count_month['month'].",";

$m[] = $count_month['month'];

这将避免再次爆炸()的需要

试试这个:

$m = array();
$months = array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
foreach( $objhst_fees->fetch_hst_fees("`month`,`fees`","where `grno`='".$stu_name['grno']."'")as $count_month)
{
    $m[] = $count_month['month'];
}
foreach ($months as $key => $month) {
    if (in_array($key, $m)) {
        continue;
    }
    echo $month . ',';
}

您不需要将$m连接为字符串,然后将其分解。
还注意到我的$months数组中的一个小变化。我取下了钥匙。但是为了保留它们1值开始,我只是在第一个(零)位置添加一个空值。

像这样的东西?

$paid_month = explode(",", $m);
$paid_months = array();
foreach($paid_month as $p) 
{
    $paid_months[$p] = (isset($months[$p]) ? $months[$p] : 'Unknown');
}
print_r($paid_months);