0

遅くなりましたが、以下の問題 (単純化されています) のパターンがわかりません。問題はプロセス関数にあります。

<?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を 2 回置き換えようとしているので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です。ポインタは常に高く評価されています!

ありがとうございました。

4

1 に答える 1

1

試す:

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

ロジック:

  • $countreturnステートメントで2、3、4、5、6...になります
  • $count/21、1.5、2、2.5、3を返します。
  • floor($count/2)1、1、2、2、3を返します。
于 2013-02-04T11:14:37.587 に答える