Php foreach循环,根据if / else

时间:2017-01-04 15:14:28

标签: php html

我目前的代码:

<?php if($_images){?>           
    <?php $i=0; foreach($_images as $_image){ $i++; ?>
        <?php if($i > 2) { ?>
            <div class = "largePic">
                <img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
            </div>
        <?php } else { ?>
            <div class = "smallPic">
            <img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
            </div>
        <?php } ?>

    <?php } ?>  
<?php } ?>  

所以这显然是错误的,因为每次图像被回显时,它被分配给不同的div(同名但不同)。是否可以根据计数将回波分配给某个div?

例如,前两个图像将分配给smallPic div,其余图像将分配给largePic div。

3 个答案:

答案 0 :(得分:2)

你想要的是首先将你的数组分成两个数组,然后通过两个数组进行预测。

<?php

$largeImages = array();
$smallImages = array();

foreach ($_images as $k => $v) {
    if ($k > 2) {
        $largeImages[] = $v;
    } else {
        $smallImages[] = $v
    }
}
?>
<div class = "largePic">
<?php foreach ($largeImages as $_image) { ?>
    <img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
<?php } ?>
</div>
<div class = "smallPic">
<?php foreach ($smallImages as $_image) { ?>
    <img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
<?php } ?>
</div>

答案 1 :(得分:2)

首先处理图像(将每个图像的HTML存储在数组或字符串中),然后创建 div 元素 - 请参阅下面的示例。这将极大地减少打开/关闭标签的数量。

另请注意,如果数组的键是数字,则可以使用以下语法而不是创建额外的变量(即$i)来跟踪索引(以避免额外的簿记,如递增变量 - foreachfor语句相比的主要好处之一。)

  

foreach(array_expression as $ key =&gt; $ value)
      声明 1

<?php 
$largePic = '';
$smallPic = '';
if($_images){      
    foreach($_images as $i => $_image){ 
        if($i > 2) { 
           $largePic .= '<img src="'.$this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900).'" alt="'. $this->htmlEscape($_image->getLabel()). '" title="'. $this->htmlEscape($_image->getLabel()).'" />';
         } else { 
            $smallPic .= '<img src="'. $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675). '" alt="'. $this->htmlEscape($_image->getLabel()). '" title="'. $this->htmlEscape($_image->getLabel()). '" />';
        } 
    }  
 } ?> 
<div class = "largePic"><?php echo $largePic; ?></div>  
<div class = "smallPic"><?php echo $smallPic; ?></div>

答案 2 :(得分:0)

我不是在PHP中,但我很确定一开始你可以放弃那些广泛的开/关标签(<?php ?>)并在开头和结尾只用一个替换它。这几乎不可读。

然后,就像在许多服务器端脚本中一样,你需要的是某种包含HTML的缓冲区,你将在循环结束时输出。因为您现在正在做的是从循环内部输出,这会将多个DIV发送给客户端。

创建包含DIV HTML的largePicsmallPic个变量,并在循环中将HTML附加到其中(而不是像现在这样将其输出到客户端)。然后,在循环结束后,将这两个变量输出到客户端。