2011-08-24 27 views
-1

下面的[示例]代码看起来好像在循环中可能更好,或者使其更具动态性。唯一改变的是字段/变量名称中的_xx和_xxyy。我如何改善这一点,所以我不必写20如果陈述?:如何让这个PHP代码循环或更动态?

<?php if (get_custom_field('itinerary_title_02')):?> 
    <div id="itinerary_entry"> 
     <h2><?php print_custom_field('itinerary_title_02'); ?></h2> 
     <p><?php print_custom_field('itinerary_content_02'); ?></p> 
     <p class="accommodation_name"><?php print_custom_field('itinerary_acc_nme_02'); ?></p> 
     <p class="accommodation_desc"><?php print_custom_field('itinerary_acc_dsc_02'); ?></p> 
     <?php if (get_custom_field('itinerary_photo_0201')):?> 
     <div><img src="<?php print_custom_field('itinerary_photo_0201'); ?>"></div> 
     <?php endif;?> 
    </div> 
    <?php endif;?> 

    <?php if (get_custom_field('itinerary_title_03')):?> 
    <div id="itinerary_entry"> 
     <h2><?php print_custom_field('itinerary_title_03'); ?></h2> 
     <p><?php print_custom_field('itinerary_content_03'); ?></p> 
     <p class="accommodation_name"><?php print_custom_field('itinerary_acc_nme_03'); ?></p> 
     <p class="accommodation_desc"><?php print_custom_field('itinerary_acc_dsc_03'); ?></p> 
     <?php if (get_custom_field('itinerary_photo_0301')):?> 
     <div><img src="<?php print_custom_field('itinerary_photo_0301'); ?>"></div> 
     <?php endif;?> 
    </div> 
    <?php endif;?> 

    <?php if (get_custom_field('itinerary_title_04')):?> 
    <div id="itinerary_entry"> 
     <h2><?php print_custom_field('itinerary_title_04'); ?></h2> 
     <p><?php print_custom_field('itinerary_content_04'); ?></p> 
     <p class="accommodation_name"><?php print_custom_field('itinerary_acc_nme_04'); ?></p> 
     <p class="accommodation_desc"><?php print_custom_field('itinerary_acc_dsc_04'); ?></p> 
     <?php if (get_custom_field('itinerary_photo_0401')):?> 
     <div><img src="<?php print_custom_field('itinerary_photo_0401'); ?>"></div> 
     <?php endif;?> 
    </div> 
    <?php endif;?> 

在此先感谢!

+6

WordPress的代码让我伤心。只是在说'。 –

+0

在get_custom_field上使用foreach语句,它来自哪里? – Drewdin

+0

我觉得你@ @克里斯! – crashintoty

回答

1
<?php 
for($i=2 ; $i<5 ; $i++){ 
    $titleNum = sprintf("%02d", $i); 
    if (get_custom_field('itinerary_title_'.$titleNum)) { 
?> 
    <div id="itinerary_entry"> 
     <h2><?php print_custom_field('itinerary_title_'.$titleNum); ?></h2> 
     <p><?php print_custom_field('itinerary_content_'.$titleNum); ?></p> 
     <p class="accommodation_name"><?php print_custom_field('itinerary_acc_nme_'.$titleNum); ?></p> 
     <p class="accommodation_desc"><?php print_custom_field('itinerary_acc_dsc_'.$titleNum); ?></p> 
    <?php if (get_custom_field('itinerary_photo_'.$titleNum.'01')){ ?> 
     <div><img src="<?php print_custom_field('itinerary_photo_'.$titleNum.'01'); ?>"></div> 
    <?php } ?> 
    </div> 
    <?php } 
    } 
    ?> 
+0

所以for函数中的“$ i = 2”代表我的出发点?如果是这样,因为我真的从头开始(“02”只是作为例子),我需要用“$ i = 1”替换“$ i = 2”? – crashintoty

+0

最后一个问题:sprintf仅仅是替换单个数字的数字(即7)并且使它们成为两位数字(即07),对吧?所以,当$ i的值等于10或更大时,它不为其添加零(即010),对吗? (我搜索/研究了sprintf函数,但它让我更困惑) – crashintoty

+0

一切正常!我将$ i = 2更改为$ i = 1,并且sprintf函数确实将单个数字转换为两位数。我确实改变了$ i <5到$ i <21正确地获得了所有20个可能的集合($ i <20将仅返回19)。尽管如此,伟大的代码!非常感谢您的时间和贡献! – crashintoty

1

您可以用for循环代替您的重复代码。

<?php 
for ($i = 2; $i <= 4; $i++) { // Modify this range as needed 
    $dynamic_value = ($i < 10) ? "0$i" : $i; // Prefix the value with a '0' when necessary 

    if (get_custom_field("itinerary_title_$i")):?> 
     <!-- HTML and PHP goes here. Replace each hard-coded number with '$i' --> 
    <?php 
} 
?> 
+0

谢谢!循环和任何有$ i ++的东西都是我的弱点。 – crashintoty