在定义变量时,会显示不完整的列表结果。但是,如果未定义变量,则会显示完整的列表结果

时间:2016-08-14 06:09:12

标签: php

我试过创建一个列表

<?php
$list=""
$list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
?>
<?php
echo $list;
?>

有了它,问题是只显示最后一个列表,并且不显示所有列表

然而 - 当我在没有定义列表变量的情况下使用它时

<?php
$list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
?>

<?php
echo $list;
?>

然后它正确显示所有列表,但它显示了php Not Undefined变量:list

可能是什么问题

被修改

完整代码

<?php foreach ($this->items as $i => $item) : ?>
            <?php $canEdit = $user->authorise('core.edit', 'com_promo'); ?>
                <?php if (isset($this->items[0]->state)) : ?>
                    <?php $class = ($canChange) ? 'active' : 'disabled'; ?>
                <?php endif; ?>

<?php
$list.='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <p></p><hr/>';  
?>              


        <?php endforeach; ?>


    <?php if ($canCreate) : ?>
        <a href="<?php echo JRoute::_('index.php?option=com_promo&task=detailform.edit&id=0', false, 2); ?>"
           class="btn btn-success btn-small"><i
                class="icon-plus"></i>
            <?php echo JText::_('COM_PROMO_ADD_ITEM'); ?></a>
    <?php endif; ?>

    <input type="hidden" name="task" value=""/>
    <input type="hidden" name="boxchecked" value="0"/>
    <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>"/>
    <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>"/>
    <?php echo JHtml::_('form.token'); ?>
</form>

<?php       
    $listings = explode("<hr/>", $list);
    $numberOfListings = count($listings);
    $Reset =1;
    for($i = 0; $i < $numberOfListings; ++$i) 
    {
        if ($Reset == 7)
        { ?> 

        <div style="margin: 0 500px 5px 12px; float: left;">
        </br></hr>

<img src="/templates/default/images/deal.jpg"/>     


  </div>

   <hr />

<p></p>

   <?php } if ($Reset == 12) { ?> 

   <div style="margin: 0 500px 5px 12px; float: left;">
        </br></hr>


<img src="/templates/default/images/scheme.jpg"/>   


   </div>

   <hr />

<p></p>

    <?php }
         echo $listings[$i] . "<hr/>";

         if($Reset>15){
                $Reset =1;
          }
          $Reset++;

    }

    ?>

然而,当尝试将解决方案作为共享放入循环内部或外部时,它会显示另外两个没有任何列表显示的通知

Notice: Undefined variable: items
Warning: Invalid argument supplied for foreach() in

已修改的解决方案

<?php
$list="";
if(count($this->items) >0){ 
    foreach($this->items as $newslist)
    //$i=1;
    {
        $list .='<h3><strong>'.$newslist->n_make.' - '.$newslist->n_model.'</strong></h3>
        <p>'.$newslist->n_month.' - '.$newslist->n_year.'</p>
        <p>'.$newslist->n_short_description.'</p>
        <p></p><hr/>';
        //$i=$i+1;
    }
}else{
       $list='<div>There are no News.</div>';

}       
?>

1 个答案:

答案 0 :(得分:1)

你显然有一个循环,虽然你没有在这里显示。

如果你在该循环中定义$list,它将在每次运行中重置,因此只会显示最后一次分配(你的最后一项)。

最简单的解决方案是将var定义放在循环之外。

<?php
$list=""
foreach($items as $item) {
    $list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
}
echo $list;
?>

或者你可以检查$list是否存在并在循环中保持定义:

<?php

foreach($items as $item) {
    if(!isset($list)) {
        $list="";
    }
    $list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
}
echo $list;
?>