2012-03-01 79 views
0

我有這個PHP:創建函數和一個foreach中調用它

<?php 

foreach ($results as $row): 

    if ($row['title'] == "") $row['title'] = date('d-m-Y', strtotime($row['date'])); 
    if (strlen($row['text']) > 100) $row['text'] = substr($row['text'], 0, 100) . "..."; 

?> 
     <div> 
      <a href="<?php echo $row['url'] ?>"> 
      <img src="<?php echo $row['image'] ?>" alt="<?php echo $row['title'] ?>" /> 
      <h1><?php echo $row['title'] ?></h1> 
      <p><?php echo $row['text']; ?></p> 
      </a> 
     </div> 
<?php endforeach ?> 

權的foreach開始後,我做了一些「大掃除」裏我替補,如果沒有標題中的日期以及縮小文本到100個字符等。

一遍又一遍重複這個效率不是很高,所以最好創建一個函數嗎?

我的問題是我該如何做到這一點?

感謝您的幫助

+0

function foo($ foo){XXX} – 2012-03-01 19:50:49

+2

即使您將其放入函數中,代碼仍會執行相同的次數。如果你在其他地方使用相同的代碼,將它放在一個函數中是很有用的。 – diolemo 2012-03-01 20:01:46

+0

這是什麼意思Dagon?你能否詳細說明一下。 – jamjam 2012-03-01 20:01:55

回答

4

請嘗試重寫你的代碼是這樣的。只需將更多您所需的功能添加到processRowData()函數。

<?php 

function processRowData($row) { 
    if ($row['title'] == "") { 
     $row['title'] = date('d-m-Y', strtotime($row['date'])); 
    } 
    // Do more with other elements from $row ... 
    // when done, return the modified $row array 
    return $row; 
} 

?> 

<?php 

foreach ($results as $row) { 
    // Alter the row data with your function 
    $row = processRowData($row); 
?> 

<div> 
    <a href="<?php echo $row['url'] ?>"> 
    <img src="<?php echo $row['image'] ?>" alt="<?php echo $row['title'] ?>" /> 
    <h1><?php echo $row['title'] ?></h1> 
    <p><?php echo $row['text']; ?></p> 
    </a> 
</div> 


<?php } ?> 
+0

完美。謝謝。 – jamjam 2012-03-01 20:16:05

+0

不客氣,jamjam,快樂編碼! – Werner 2012-03-01 20:22:59

+0

您可以通過引用'processRowData(&$ row)'傳遞變量,然後您不必返回它,因爲它會隨時更改。另外,在混合的html/php中,最好使用'foreach():'和'endforeach;',而不是括號{{}},因爲它更具可讀性。 – Wirone 2012-06-03 00:28:31