2012-11-01 26 views
1

比方說,我有這樣的「個人資料頁」代碼:僅顯示可用變量但不包含IF,可能嗎?

<table border="1"> 
<tr> 
<td>First Name : </td> 
<td>John</td> 
</tr> 
<tr> 
<td>Last Name : </td> 
<td>Doe</td> 
</tr> 
<tr> 
<td>Hobby : </td> 
<td>Soccer</td> 
</tr> 
... 
</table> 

和那些個人資料是從數據庫存儲和某些字段是可選的。例如:愛好,雅虎通Messenger ID,推特ID等

如何有效顯示所有可用信息?我的意思是,國際單項體育聯合會使用少......因爲目前這裏是我在做什麼:

<table border="1"> 
<tr> 
<td>First Name : </td> 
<td>John</td> 
</tr> 
<tr> 
<td>Last Name : </td> 
<td>Doe</td> 
</tr> 

<?php 
if (!empty($hobby)){ 
echo '<tr> 
<td>Hobby : </td> 
<td>'.$hobby.'</td> 
</tr>';} 
?> 

<?php 
if (!empty($YahooID)){ 
echo '<tr> 
<td>Yahoo ID : </td> 
<td>'.$YahooID.'</td> 
</tr>';} 
?> 

... 
</table> 
+0

你就不能重構每個'如果(東西){...}'到一個單獨的功能,然後array_walk這個函數在'varname'=>'label'結構的數組上面? – raina77ow

+0

將其封裝在函數中和/或使用具有適當變量的循環來減少代碼重複性。通常的編程工具... – deceze

回答

4

遍歷您的屬性(名字,姓氏...)或列(DB側),如果設置,添加一個關鍵/值條目在某些數組中:nameOfAttribute,valueOfAttribute。

當通過這個數組渲染HTML,環

echo '<tr><td>'.$key.' : '</td><td>'.$value+'</td></tr>'; 

或者,

function renderIfSet($value, $title) 
{ 
    if ($value) return '<tr><td>$title :</td><td>$value</td></tr>'; 
} 

而且你的代碼變成:

<? echo renderIfSet($hobby, "Hobby") ?> 
<? echo renderIfSet($YahooID, "Yahoo ID") ?> 
+0

把DB結果放入數組並將其循環爲$ key和$ value是一個絕妙的解決方案!我會選擇你的答案作爲這裏的最佳解決方案... –

2

創建一個函數...

function checkVal($label,$value){ 
    if(!empty($value)){ 
     $row .= '<td>'.$label.'</td>'; 
     $row .= '<td>'.$value.'</td>'; 
    } 
} 

調用函數...

checkVal('Hobby',$hobby); 
3
function someAction($data) { 
     if (!empty($data['data'])) { 
      return '<tr> 
      <td>{$data[title]} : </td> 
      <td>'.$data['data'].'</td> 
      </tr>';    
     } 
    } 

$datas = array(
    array('data' => $YahooID, 'title' => 'YahooID'), 
    ....); 

foreach($datas as $k => $v) { 
    echo someAction($) 
} 

類似的東西

相關問題