You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并对象数组并仅按单个属性(以category为例)过滤?

Filter & Merge Category Arrays by 'category' Property in Smarty

Hey there! Let's break down how to handle your requirement—whether you want to remove duplicate category entries or group your objects by the category property, here are practical Smarty solutions tailored to your scenario.

Option 1: Remove Duplicates (Keep Unique Categories)

If your goal is to output only unique entries based on the category name (so no repeated category names), you can use a temporary array to track which categories you've already processed:

{* Set up an empty array to track categories we've already seen *}
{assign var='seen_cats' value=[]}

{foreach from=$categories item=cat}
    {* Only process this category if we haven't seen its name before *}
    {if !in_array($cat.category, $seen_cats)}
        {* Add the category name to our tracking array *}
        {append var='seen_cats' value=$cat.category}
        
        {* Output the category (adjust this line to match your desired format) *}
        {'| '|implode:$cat}{if not $smarty.foreach.cat.last}| {/if}
    {/if}
{/foreach}

What this does:

  • $seen_cats acts as a "memory" to avoid repeating the same category name.
  • The in_array check skips any category we've already processed.
  • The {if not $smarty.foreach.cat.last} part ensures we don't add a trailing | at the end of your output.

Option 2: Group Objects by Category

If you want to merge/group all objects under their respective category names (e.g., list all entries that belong to "Category name" together), build a grouped array first:

{* Initialize an array to hold our grouped categories *}
{assign var='grouped_cats' value=[]}

{* Loop through each category and organize them by their category name *}
{foreach from=$categories item=cat}
    {assign var='cat_name' value=$cat.category}
    {append var='grouped_cats.'$cat_name value=$cat}
{/foreach}

{* Now display the grouped data *}
{foreach from=$grouped_cats item=items key=category_name}
    <strong>{$category_name}</strong>
    <ul>
        {foreach from=$items item=item}
            <li>ID: {$item.category_id} | Parent ID: {$item.parent_id}</li>
        {/foreach}
    </ul>
{/foreach}

How this works:

  • $grouped_cats becomes an associative array where each key is a category name, and the value is an array of all objects with that category.
  • You can then loop through this grouped array to display each category and its associated entries in a structured way.

Quick Note on Your Original Code

Your original {'| '|implode:$category} line takes all the values of a single category object and joins them with | . If you want to keep that exact format but only for unique categories, just use that line as the output in Option 1 (like I did in the first code example).

内容的提问来源于stack exchange,提问作者el.severo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:15:47