首页 > 解决方案 > foreach 由于某种原因无法正常工作

问题描述

我的脚本的这一部分显示了我的网站提供的最后一个报价,但由于某种原因,它显示了与图像显示相同的报价 3 次。

图片在这里

这是脚本附带的代码

<?php foreach($specialoffers as $offer) if ($tmp++ < 3) { ?>
<div class="col-md-4">
    <div class="col-md-12">
        <?php if($specialoffers[0]->price > 0){ ?> <span class="wow bounce ttu"><?php echo trans('0536');?> <b><?php echo trans('0388');?></b> <small><?php echo $specialoffers[0]->currCode;?></small> <?php echo $specialoffers[0]->currSymbol; ?><?php echo $specialoffers[0]->price;?></span>
        <?php } ?>
        <div class="imgLodBg">
        <div class="load"></div>
        <a href="<?php echo base_url(); ?>offers">
        <img data-wow-duration="0.2s" data-wow-delay="1s" class="wow fadeIn" src="<?php echo $specialoffers[0]->thumbnail;?>">
        </a>
        </div>
    </div>
    <div class="col-md-12">
        <h3 class="offh3"><strong class="ttu"><?php echo character_limiter($specialoffers[0]->title,30);?></strong></h3>
        <p class="offp">
            <?php echo character_limiter($specialoffers[0]->desc,240);?>
            <a href="<?php echo base_url(); ?>offers" >
            Read More
            </a>
        </p>
    </div>
</div>
<?php } ?>

当我尝试以下更改时,页面崩溃了,我收到了这个错误

[2018 年 8 月 12 日 13:48:09 UTC] PHP 致命错误:无法在第 152 行的 /home/bannabooking/public_html/beta/themes/default/views/home/index.php 中使用 stdClass 类型的对象作为数组

更改代码:

<?php foreach($specialoffers as $offer) if ($tmp++ < 3) { ?>
<div class="col-md-4">
    <div class="col-md-12">
        <?php if($offer[0]->price > 0){ ?> <span class="wow bounce ttu"><?php echo trans('0536');?> <b><?php echo trans('0388');?></b> <small><?php echo $offer[0]->currCode;?></small> <?php echo $offer[0]->currSymbol; ?><?php echo $offer[0]->price;?></span>
        <?php } ?>
        <div class="imgLodBg">
        <div class="load"></div>
        <a href="<?php echo base_url(); ?>offers">
        <img data-wow-duration="0.2s" data-wow-delay="1s" class="wow fadeIn" src="<?php echo $offer[0]->thumbnail;?>">
        </a>
        </div>
    </div>
    <div class="col-md-12">
        <h3 class="offh3"><strong class="ttu"><?php echo character_limiter($offer[0]->title,30);?></strong></h3>
        <p class="offp">
            <?php echo character_limiter($offer[0]->desc,240);?>
            <a href="<?php echo base_url(); ?>offers" >
            Read More
            </a>
        </p>
    </div>
</div>
<?php } ?>

标签: phpforeach

解决方案


在里面foreach () {}你已经有单独的$offers对象了。因此,$offer[0]->price您需要直接访问每个$offer->price,$offer->desc等,而不是通过 访问它们。

通常,该foreach () {}方法如下所示:

$offers = [new Offer('a'), new Offer('b')];
foreach ($offers as $offer) {
    // $offer here sequentially corresponds 
    // to each element of the $offers array
    echo $offer->price;
}

另一种完成数组迭代的方法$offers可能如下所示:

$offers = [new Offer('a'), new Offer('b')];
for ($i = 0; $i < array_length($offers); $i++) {
    echo $offers[$i]->price;
} 

因此,您只需要坚持使用其中一种方法。而且通常foreach看起来更准确。


推荐阅读