优化项目列表的PHP代码

时间:2012-10-19 09:37:53

标签: php joomla2.5

我正在使用joomla!将一些额外的字段输出到文章中。这些字段是使用backslider jquery插件显示的图像列表(最多10个)。

以下是我用过的代码:

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php 
            $img1 = $this->item->extrafields['image_1'];
            $img2 = $this->item->extrafields['image_2'];
            $img3 = $this->item->extrafields['image_3'];
            $img4 = $this->item->extrafields['image_4'];
            $img5 = $this->item->extrafields['image_5'];
            $img6 = $this->item->extrafields['image_6'];
            $img7 = $this->item->extrafields['image_7'];
            $img8 = $this->item->extrafields['image_8'];
            $img9 = $this->item->extrafields['image_9'];
            $img10 = $this->item->extrafields['image_10'];
        ?>
        <?php if($img1) { ?>
        <li><img src="<?php echo $img1; ?>"></li>
        <?php } ?>
        <?php if($img2) { ?>
        <li><img src="<?php echo $img2; ?>"></li>
        <?php } ?>
        <?php if($img3) { ?>
        <li><img src="<?php echo $img3; ?>"></li>
        <?php } ?>
        <?php if($img4) { ?>
        <li><img src="<?php echo $img4; ?>"></li>
        <?php } ?>
        <?php if($img5) { ?>
        <li><img src="<?php echo $img5; ?>"></li>
        <?php } ?>
        <?php if($img6) { ?>
        <li><img src="<?php echo $img6; ?>"></li>
        <?php } ?>
        <?php if($img7) { ?>
        <li><img src="<?php echo $img7; ?>"></li>
        <?php } ?>
        <?php if($img8) { ?>
        <li><img src="<?php echo $img8; ?>"></li>
        <?php } ?>
        <?php if($img9) { ?>
        <li><img src="<?php echo $img9; ?>"></li>
        <?php } ?>
        <?php if($img10) { ?>
        <li><img src="<?php echo $img10; ?>"></li>
        <?php } ?>
    </ul>
</div>

我不是一个PHP专家,但有更好的方法来优化这个代码,我想也许可以将$ img变量放入一个数组并使用foreach循环输出每个列表项?

一点点帮助不会错过:)

3 个答案:

答案 0 :(得分:3)

只需迭代它们并使用索引来引用数组索引:

for ($i = 1; $i <= 10; ++$i) {
    if (!empty($this->item->extrafields["image_$i"])) {
         echo '<li><img src="', htmlspecialchars($this->item->extrafields["image_$i"]), '"></li>';
    }
}

假设有多达10项需要调查。

答案 1 :(得分:1)

下面的解决方案将避免评估字符串,缓存所有可能的内容,保持应用程序平稳运行,并使代码保持整洁。

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php
        // Generate length of our image array / store known length of array
        $images = 10;

        // Loop through images
        for( $i = 1; $i <= $images; $i++ ) {
            // Store it for optimization sake.
            $field = $this->item->extrafields['image_' . $i];

            // Check it's not empty
            if( !empty( $field ) ) {

                // If not, print to browser
                printf(
                    '<li><img src="%s" alt=""></li>',
                    htmlspecialchars($field)
                );
            }
        }
        ?>
    </ul>
</div>

答案 2 :(得分:0)

我认为这段代码会做同样的事情。

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php 
            for($i = 1; $i <= 10; $i++)
            {
                $img = $this->item->extrafields['image_'.$i]
                  if($img) { ?>
                      <li><img src="<?php echo $img; ?>"></li>
              <?php } 
           }
         ?>
    </ul>
</div>