【问题标题】:How do I make this PHP code a loop or more dynamic?如何使这个 PHP 代码成为循环或更动态?
【发布时间】:2011-08-24 18:25:20
【问题描述】:

下面的 [示例] 代码似乎可以更好地循环使用或使其更具动态性。唯一改变的是字段/变量名称中的 _xx 和 _xxyy。我怎样才能改进这一点,这样我就不必写 20 个 if 语句了?:

    <?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;?>

提前致谢!

【问题讨论】:

  • Wordpress 代码让我很伤心。只是说。
  • 在 get_custom_field 上使用 foreach 语句,它来自哪里?

标签: php wordpress optimization loops


【解决方案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 }
     }
     ?>

【讨论】:

  • 所以for函数中的“$i=2”代表我的出发点?如果是这样,因为我真的是从头开始(“02”只是作为示例)我需要将“$i=2”替换为“$i=1”?
  • 最后一个问题:sprintf 只是简单地替换个位数(即 7)并使其成为两位数(即 07),对吗?因此,当 $i 的值等于或大于 10 时,它不会向其添加零(即 010),对吗? (我用谷歌搜索/研究了 sprintf 函数,但它让我更加困惑)
  • 一切正常!我将 $i=2 更改为 $i=1 并且 sprintf 函数确实将个位数转换为两位数。我确实将 $i
  • @crashintoty 不错! sprintf 函数用于格式化字符串。你有很多选项和参数。 0 导致 printf 使用 0 而不是空格来左填充固定长度的字段。例如,printf("%2d", 3) 的结果是 "3",而 printf("%02d", 3) 的结果是 "03"。 而数字 2我们将长度固定为 2 个数字。所以当你有 54 时,不需要用前导零填充任何内容,因为你已经有 2 个数字了。
【解决方案2】:

您可以用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
}
?>

【讨论】:

  • 谢谢!循环和任何带有 $i++ 的东西都是我的弱点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多