2014-05-06 164 views
0

這裏是我的代碼,PHP - 字符串連接 - 通過循環

if ($_SESSION["crossfit"]=="Y") { if ($_SESSION["tr_duration1"]==1) { $dr1="1 Month"; } else { 
if ($_SESSION["tr_duration1"]==12) { $dr1="1 Year"; } else 
    { $dr1=$_SESSION["tr_duration1"] . ' Months'; }} $c1='Crossfit - ' . $dr1;} 

if ($_SESSION["muaythai"]=="Y") { if ($_SESSION["tr_duration2"]==1) { $dr2="1 Month"; } else { 
if ($_SESSION["tr_duration2"]==12) { $dr2="1 Year"; } else 
    { $dr2=$_SESSION["tr_duration2"] . ' Months'; }} $c2=', Muaythai - ' . $dr2;} 

if ($_SESSION["mma"]=="Y") { if ($_SESSION["tr_duration3"]==1) { $dr3="1 Month"; } else { 
if ($_SESSION["tr_duration1"]==12) { $dr3="1 Year"; } else 
    { $dr3=$_SESSION["tr_duration3"] . ' Months'; }} $c3=', MMA - ' . $dr3;} 

if ($_SESSION["gymnastics"]=="Y") { if ($_SESSION["tr_duration4"]==1) { $dr4="1 Month"; } else { 
if ($_SESSION["tr_duration4"]==12) { $dr4="1 Year"; } else 
    { $dr4=$_SESSION["tr_duration4"] . ' Months'; }} $c4=', Gymnastics - ' . $dr4;} 

$for = $c1 . $c2 . $c3 . $c4 . '.'; 

至少節目之一將是「Y」或全部。

我想要的是$ c1 $ c2 $ c3 $ c4出來用','分隔並以'。'結尾。所以它變得可讀。

我的問題是,如果我把

$for = $c1 . $c2 . $c3 . $c4 . '.';和 '' 以$ c1和選擇方案2和3

我得到

$for = , Muaythai - 3 Months, MMA - 12 Months. 
當然我想的

$for = Muaythai - 3 Months, MMA - 12 Months. 

如果我把','直接放在$中,如果第二和第三個程序從$ c1中刪除MS選擇

$for = $c1 . ',' . $c2 . ',' . $c3 . ',' . $c4 . '.' 

我得到

$for = ,Muaythai - 3 Months, MMA - 12 Months,. 

我想

$for = Muaythai - 3 Months, MMA - 12 Months. 

我也試圖把築巢這麼多isset的,但都沒有成功。 我也嘗試了一個'for'循環,但最終出現了比輸出錯誤更多的語法錯誤

只有當我只選擇第一個程序或所有4個程序時,它才能正常工作。

+0

使用單個字符串並將所有值鏈接到它。 –

回答

4

嘗試這樣:

$tmp = array($c1,$c2,$c3,$c4); 
$filtered = array_filter($tmp); 
$for = implode(",", $filtered)."."; 

這將去掉任何$c_變量不填充的,並用逗號分隔。


編輯:我reivewed你的代碼,並想建議這個優化版本:

$keys = array("Crossfit","Muaythai","MMA","Gymnastics"); 
$result = array(); 
foreach($keys as $i=>$name) { 
    if($_SESSION[strtolower($name)] == "Y") { 
     $duration = $_SESSION['tr_duration'.($i+1)]; 
     switch($duration) { 
      case 1: $dur = "1 Month"; break; 
      case 12: $dur = "1 Year"; break; 
      default: $dur = $duration." Months"; 
     } 
     $result[] = $name." - ".$dur; 
    } 
} 
if(!$result) $for = "Nothing selected!"; 
else $for = implode(", ",$result)."."; 

如果您需要幫助瞭解是怎麼回事,隨便問!

+0

太棒了..但是我不明白你做了什麼,因爲我是PHP新手,所以我會去閱讀文檔。非常感謝。 –

+0

沒問題:) http://php.net/array-filter應該有幫助。基本上,通過不傳遞迴調函數,它只是檢查它們是否真實。 http://php.net/implode是無價的。 –

+0

@huz_akh:第一條語句將所有變量'$ c1'到'$ c4'存儲到名爲'$ tmp'的數組中。 ['array_filter()'](http://php.net/array_filter)函數然後刪除空值。 ['implode()'](http://php.net/implode)將數組中的部分連接到由逗號分隔的單個字符串。 –

0

你可以使用單個變量和連續值對它進行操作。

嘗試這樣的:

for = ""; 
if ($_SESSION["crossfit"] == "Y") { 
    if ($_SESSION["tr_duration1"] == 1) { 
     $dr1 = "1 Month"; 
    } else { 
     if ($_SESSION["tr_duration1"] == 12) { 
      $dr1 = "1 Year"; 
     } else { 
      $dr1 = $_SESSION["tr_duration1"] . ' Months'; 
     } 
    } 
    $for .= 'Crossfit - ' . $dr1; 
} 

if ($_SESSION["muaythai"] == "Y") { 
    if ($_SESSION["tr_duration2"] == 1) { 
     $dr2 = "1 Month"; 
    } else { 
     if ($_SESSION["tr_duration2"] == 12) { 
      $dr2 = "1 Year"; 
     } else { 
      $dr2 = $_SESSION["tr_duration2"] . ' Months'; 
     } 
    } 
    $for .= empty($for) ? 'Muaythai - ' . $dr2 : ', Muaythai - ' . $dr2; 
} 

if ($_SESSION["mma"] == "Y") { 
    if ($_SESSION["tr_duration3"] == 1) { 
     $dr3 = "1 Month"; 
    } else { 
     if ($_SESSION["tr_duration1"] == 12) { 
      $dr3 = "1 Year"; 
     } else { 
      $dr3 = $_SESSION["tr_duration3"] . ' Months'; 
     } 
    } 
    $for .= empty($for) ? 'MMA - ' . $dr3 : ', MMA - ' . $dr3; 
} 

if ($_SESSION["gymnastics"] == "Y") { 
    if ($_SESSION["tr_duration4"] == 1) { 
     $dr4 = "1 Month"; 
    } else { 
     if ($_SESSION["tr_duration4"] == 12) { 
      $dr4 = "1 Year"; 
     } else { 
      $dr4 = $_SESSION["tr_duration4"] . ' Months'; 
     } 
    } 
    $for .= empty($for) ? 'Gymnastics - ' . $dr4 : ', Gymnastics - ' . $dr4; 
    $c4 = ', Gymnastics - ' . $dr4; 
} 

你應該使用開關的情況下,而不是很多,如果別的。

+0

我曾試過類似的方法,除了'空($ for)?'事情..也許這就是爲什麼我的代碼失敗了。 –