2013-02-04 37 views
0

這是晚了,我無法弄清楚下面的問題(已被簡化)的模式。問題在於處理功能。有問題的模運算符在preg_replace_callback

<?php 
function imcrement_image_id($template){ 
    return preg_replace_callback('/%image_id%/', 'process', $template); 
} 

function process($match){ 
    static $count = 0; 
    $count++; 
    $output = ''; 
    if($count %2 == 0){ 
     $output = 'image-' . (--$count); 
     $count++; 
    } else { 
    $output = 'image-' . $count; 
    } 
return $output; 
} 
?> 

在這段代碼中可以看到函數的應用。我試圖每次循環替換image_id 兩次,以便figure id="%image_id"<a href="%image_id"匹配。

<?php for ($i=0; $i <3 ; $i++): ?> 
<?php ob_start(); ?> 
<figure id="%image_id%"> 

      <a href="#%image_id%" > 
       <img src="http://placehold.it/550x209"> 
       <figcaption>Caption</figcaption> 
      </a> 
      <p class="description">Quisque facilisis </p> 
</figure> 
<?php $template .= ob_get_clean(); ?> 
<?php endfor; ?> 
// later... 
echo $template; 

目前,該代碼的工作,但它會產生類似這樣的標記:

<figure id="image-1"> 
<a href="#image-1"> 
... 
<figure id="image-3"> 
<a href="#image-3"> 
... 
<figure id="image-3"> 
<a href="#image-3"> 

我想它是image-1 image-1, image-2 image-2, image-3 image-3等。指針總是感激!

謝謝。

+0

這裏'%'符號不是模運算符;它只是一個字符串中的一個字符。字符串'%image_id%'被用作字符串替換的佔位符。它可能是任何字符串;它恰好包含百分號。根本沒有模數。 – SDC

+0

@SDC你忽略了這一行:'if($ count%2 == 0)' –

+0

@feb - 恩,你說得對。我想我是由preg_replace_callback中提及的模塊問題引發的,並結合preg_replace_callback和佔位符字符串中的佔位符。 – SDC

回答

1

嘗試:

function process($match){ 
    static $count = 1; 
    $count++; 
    return 'image-' . floor($count/2); 
} 

邏輯:

  • $count將是2,3,4,5,6 ......在return聲明
  • $count/2將返回1,1.5 ,2,2.5,3 ...
  • floor($count/2)將返回1,1,2,2,3 ......
+0

謝謝,還有一個很好的解釋! – Simon