2012-10-19 49 views
-2

我在jQuery Mobile中做了listview,我用PHP來提供它的內容。它工作正常,但代碼太長,大部分代碼都非常相似。有什麼辦法可以簡化代碼嗎?請看看代碼,然後我會解釋一下我真正需要做的:我如何簡化這個PHP代碼?太多switch()函數

<ol data-role="listview"> 
      <?php 
      while ($row = mysql_fetch_array($result)){ 
       echo "<li><a href=\"#\">"; 
       // first column check 
       switch ($row[1]) { 
        case "Behnam": 
         echo " B . "; 
         break; 
        case "Tarin": 
         echo " T . "; 
         break; 
       } 
       // second column check 
       switch ($row[2]) { 
        case "Behnam": 
         echo " B . "; 
         break; 
        case "Tarin": 
         echo " T . "; 
         break; 
        default: 
         echo " N . "; 
       } 
       // third column check 
       switch ($row[3]) { 
        case "Behnam": 
         echo " B . "; 
         break; 
        case "Tarin": 
         echo " T . "; 
         break; 
        default: 
         echo " N . "; 
       } 
       // fourth column check 
       switch ($row[4]) { 
        case "Behnam": 
         echo " B . "; 
         break; 
        case "Tarin": 
         echo " T . "; 
         break; 
        default: 
         echo " N . "; 
       } 
       // fifth column check 
       switch ($row[5]) { 
        case "Behnam": 
         echo " B . "; 
         break; 
        case "Tarin": 
         echo " T . "; 
         break; 
        default: 
         echo " N . "; 
       } 
       // sixth column check 
       switch ($row[6]) { 
        case "Behnam": 
         echo " B "; 
         break; 
        case "Tarin": 
         echo " T "; 
         break; 
        default: 
         echo " N "; 
       } 
       echo "</li></a>"; 
      } 
      ?> 
      </a></li> 
     </ol> 

,其結果是:

enter image description here

通過使用while ($row = mysql_fetch_array($result)){我可以獲取的每一行一個一個的sql表。但我也需要檢查每個單元格(列)的值。

回答

1

組代碼在2參數功能:

function checkRowValue($row, $checkDefault) { 
     switch ($row) { 
      case "Behnam": 
       echo " B . "; 
       break; 
      case "Tarin": 
       echo " T . "; 
       break; 
      default: 
       if ($checkDefault) 
        echo " N . "; 
     } 
    } 

調用爲:

<ol data-role="listview"> 
     <?php 
     while ($row = mysql_fetch_array($result)){ 
      echo "<li><a href=\"#\">"; 
      // first column check 
      for ($i = 0; $i < 7; $i++) 
       checkRowValue($row[i], $i > 0); 
     } 
+1

想到更多一點後,我也想出了相同的想法。謝謝你,小夥伴。我現在將發佈最終結果。 –

+0

是的,也應該這樣做,但是如果你可以保留這個函數,那麼它會使代碼更具可讀性;) – higuaro

-1
<?php 
       while ($row = mysql_fetch_array($result)){ 
        echo "<li><a href=\"#\">"; 
        // first column check 
      foreach($row as r) 
      { 


        switch (r) { 
         case "Behnam": 
          echo " B . "; 
          break; 
         case "Tarin": 
          echo " T . "; 
          break; 
        } 
} 
    ?> 
+0

這是行不通的。它顯示第0行,第1行第1列等,而不是每行顯示6列。 – Barmar

+0

c我的編輯請用功能更合適。 –

1

這由你行過的所有列應用功能概括它(跳過第一),然後將它們與" . "一起串起來。

while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
    echo "<li><a href=\"#\">"; 
    echo join(' . ', array_map(function($v) { 
     if ($v == 'Behnam') { 
      return 'B'; 
     elseif ($v == 'Tarin') { 
      return 'T'; 
     else { 
      return 'N'; 
     } 
    }, array_slice($row, 1)); 
    echo "</li></a>"; 
} 
+0

我不知道array_map和array_slice。我將在php.net中查找他們的文檔並瞭解更多關於它們的信息。謝謝你給我的線索。我正在尋找這樣一個答案。 –

0

嘗試這個

if(in_array("Behnam",$row) { 
     echo " B . "; 
    } 
    else if(in_array("Train",$row) { 
     echo " T . "; 
    } 
    else { 
     echo " N . "; 
    } 
+0

謝謝,但它不適用於我的情況。它只返回一個值。我需要對數組中的每個值應用更改並返回所有這些值,而不僅僅是一個。 –

0

這是最後的結果是:

<ul id="competition_list" data-role="listview" data-inset="true" data-theme="a"> 
      <?php 
      // using the returned value from database to feed the list. 
      // showing the competiton rounds' outcome. 
      while ($row = mysql_fetch_array($result)){ 
        echo "<li><a href=\"#\">"; 
        echo $row[0] . "."; //this is the id column in the table and will give me the number of the row 
        for($i = 1; $i <= 5; $i++){ 
         switch ($row[$i]) { 
         case "Behnam": 
          echo "&nbsp;&nbsp; B &nbsp;&nbsp;"; 
          break; 
         case "Tarin": 
          echo "&nbsp;&nbsp; T &nbsp;&nbsp;"; 
          break; 
         } 
        } // end for() 
        echo "</a></li>"; 
      } // end while() 
      ?> 
     </ul>