2013-10-22 32 views
3

我有以下代码。 我有一个月的数组。这段代码的其他方法是什么?

  $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这样做的替代方法是什么?

+0

因此,您对'1,2,3'的预期结果是'1月,2月,3月',对不对? – mavrosxristoforos

+0

是的,但是如果'$ arr'包含'1,2,3',那么输出是'四月,may,june ... dec'' – ravi

回答

0

在代码:

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']; 

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

0

试试这个:

$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开始,我只需在第一个(零)位置添加一个空值。

0

是这样的吗?

$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);