使用 foreach 将元素数组放在正确的标题下

Posted

技术标签:

【中文标题】使用 foreach 将元素数组放在正确的标题下【英文标题】:Put array of elements under correct header with foreach 【发布时间】:2012-05-26 02:06:27 【问题描述】:

我有一系列供应商称为:

$listOfVendors 

我在视图中使用 foreach 遍历这个数组。

<?php foreach($listOfVendors as $vendor):?>         

    <p class="vendor">
        <span class="vendor-title"><?php echo $vendor->name ?>(<?php echo $vendor->country ?>)</span>, 
        <?php echo $vendor->goods ?>, <a href="<?php echo $vendor->site_adres ?>" class="vendor-link"><?php echo $vendor->site_adres ?></a>
    </p>                                            

<?php endforeach ?> 

每个供应商对象都有以下属性:

vendors_Id名称国家商品site_addressactivities_Id。最后一个,activity_Id,是表活动的 FK,目前有两种类型的活动:经销商和艺术家。

现在我想为每种类型的供应商添加一次标题。所以想要得到类似的东西:

艺术家

Vendor1(DE),Eigen posters e.a.商品,http://www.linktosite.com

经销商

Vendor2(BE),玩具、DVD、书籍,http://www.anotherlink.be

供应商3(法国),商品,http://www.anotherlink2link.be

我该怎么做? 我似乎无法理解这个看似简单的事情。

编辑解决方案

控制器活动 -> 功能供应商

//Get the vendor information and add the needed headers
//Here I get all the vendors
if($listOfVendors = $this->atsusacon_model->get_records())  
    foreach($listOfVendors as $vendor) 
        $listOfVendorsByType[$vendor->activities_Id][] = $vendor;   
       
    $data['listOfVendorsByType'] = $listOfVendorsByType;    
    var_dump($listOfVendorsByType);
   

查看活动/供应商

<section class="vendors-overview twelvecol clearBoth">

    <?php foreach($listOfVendorsByType as $activity):?> 

        <?php if ($activity[0]->activities_Id == 1) :?> 
            <h3>Artists</h3>
         <?php else :?>
            <h3>Dealers</h3>
        <?php endif ?>

        <?php foreach($activity as $vendor):?>      

            <p class="vendor">
                <span class="vendor-title"><?php echo $vendor->name ?>(<?php echo $vendor->country ?>)</span>, <?php echo $vendor->goods ?>, <a href="<?php echo $vendor->site_address ?>" class="vendor-link"><?php echo $vendor->site_address ?></a>
            </p>                                    

        <?php endforeach ?>         
    <?php endforeach ?> 

</section>

我可以让它更有活力,但就目前而言,这正是它应该的样子。

$listOfVendorsByType 的 var_dump 如下所示:

【问题讨论】:

【参考方案1】:

你必须创建一个嵌套数组:

<?php 
 foreach($listOfVendors as $vendor) 
   $vendorsByType[$vendor['activities_id']][] = $vendor;
 
?> 

现在您只需使用两个 foreach 循环遍历这个嵌套数组。

【讨论】:

【参考方案2】:

猜想你必须获取外键的数据,而不是你必须循环两次: 确保正确“链接”供应商和活动。

foreach (activities ...) 
  // looping 2 times
  foreach (vendor ...) 
    // looping x times (=amount of vendors)
    ...
  

【讨论】:

类似于傻瓜发布的内容,但他的回答为我的问题的解决提供了一个更好的“开始”。 没问题。我在他的解决方案中看不到他试图获取活动数据的位置 - 似乎这部分仍然丢失!? 在我的原始代码中,我将 listOfVendors 直接插入到我的数据数组中。在我看来,然后我会遍历 listOfVendors,正如您在我的问题中看到的那样,但这样做会使创建像我在问题中发布的标题一样不可能或至少非常困难。 Blockhead 然后建议在我的控制器中创建一个嵌套数组。所以我在一个数组中有一个数组,我的供应商对象是根据他们的活动 ID 排序的。我将使用 var_dump($listOfVendors) 屏幕更新我的问题以及我是如何做到的。【参考方案3】:

添加这个数组

$header = array( "header1", "header2", "header3" );

//现在 $header[0] = "header1" $header[1] = "header2" 以此类推

$i=0;
<?php foreach($listOfVendors as $vendor):?>         
<p class="header">
<?php echo $header[$i]; $i++; ?>
</p>
<p class="vendor">
    <span class="vendor-title"><?php echo $vendor->name ?>(<?php echo $vendor->country ?>)</span>, 
    <?php echo $vendor->goods ?>, <a href="<?php echo $vendor->site_adres ?>" class="vendor-link"><?php echo $vendor->site_adres ?></a>
</p>                                            

<?php endforeach ?> 

【讨论】:

不错的尝试,但不是我想要的。

以上是关于使用 foreach 将元素数组放在正确的标题下的主要内容,如果未能解决你的问题,请参考以下文章

Foreach $_POST - 如何增加指向下一个元素的数组指针

在 Fluid foreach 中填充 Javascript 数组

如何将foreach中的元素添加到数组中

如何在 forEach 循环节点中使用 Promise?

给定一个数跟数组,将小于等于该数的数组元素放在左边,将大于该数的数组元素放在右边

foreach 详解