Shopify 中是否有 PHP In_array() 的替代方案?
Is there any alternative of PHP In_array() in Shopify?
我尝试了很多东西,但没有得到我想要的东西。
下面是我在 Shopify 中寻找什么类型数组的示例,
$array['bag'] = 2; $array['shoes'] = 3; $array['xyz'] = 6;
这是我在 shopify 中查找数组变量的内容和方式的示例。
哪里
bag, shoes, xyz
是产品类型
and 2,3,6
是为特定产品类型添加的产品数量。
我知道在 PHP 中很容易,但不知道如何在 Shopify liquid 代码中进行操作。
按照Shopify documentation, you cannot initialize arrays. However, you can use split filter创建一维数组。您不能使用它创建关联数组。但是,作为解决方法,使用 2 个相同长度的数组,其中两个数组中的相同索引指向关联数组的相关键和值。示例代码
{% assign product_type = "type-1|type-2|type-3" | split: '|' %}
{% assign product_count = "1|2|3" | split: '|' %}
{% for p_type in product_type %}
{{ p_type }}
{{ product_count[forloop.index0] }}
{% endfor %}
预期输出
Product Type Count
type-1 1
type-2 2
type-3 3
对于评论中解释的特定场景,请查看下面的代码和代码评论。我使用 checkout object 作为示例代码。您可以根据需要进行调整。
// declare 2 vars to create strings - that will be converted to arrays later
{% assign product_type = "" %}
{% assign product_count = "" %}
// iterate over line_items in checkout to build product_type string
{% for line_tem in checkout.line_items %}
// if product_type exists , then skip -- unique product types
{% if product_type contains line_tem.product.type%}
{% else %}
{% assign product_type = product_type | append: '#' | append: line_tem.product.type %}
{% endif %}
{% endfor %}
// remove first extra hash and convert to array
{% assign product_type = product_type | remove_first: "#" | split: '#' %}
// iterate over unique product type array generated earlier
{% for product_type_item in product_type %}
// set product count for this product type to zero initially
{% assign total_count = 0 %}
// iterate over all lin items and +1 if same product type
{% for line_tem in checkout.line_items %}
{% if product_type_item == line_tem.product.type%}
{% assign total_count = total_count | plus: 1 %}
{% endif %}
{% endfor %}
// append count to product count string
{% assign product_count = product_count | append: '#' | append: total_count %}
{% endfor %}
// remove first extra hash and convert to array
{% assign product_count = product_count | remove_first: "#" | split: '#'%}
{{-product_type-}}
{{-product_count-}}
我尝试了很多东西,但没有得到我想要的东西。
下面是我在 Shopify 中寻找什么类型数组的示例,
$array['bag'] = 2; $array['shoes'] = 3; $array['xyz'] = 6;
这是我在 shopify 中查找数组变量的内容和方式的示例。
哪里
bag, shoes, xyz
是产品类型
and 2,3,6
是为特定产品类型添加的产品数量。
我知道在 PHP 中很容易,但不知道如何在 Shopify liquid 代码中进行操作。
按照Shopify documentation, you cannot initialize arrays. However, you can use split filter创建一维数组。您不能使用它创建关联数组。但是,作为解决方法,使用 2 个相同长度的数组,其中两个数组中的相同索引指向关联数组的相关键和值。示例代码
{% assign product_type = "type-1|type-2|type-3" | split: '|' %}
{% assign product_count = "1|2|3" | split: '|' %}
{% for p_type in product_type %}
{{ p_type }}
{{ product_count[forloop.index0] }}
{% endfor %}
预期输出
Product Type Count
type-1 1
type-2 2
type-3 3
对于评论中解释的特定场景,请查看下面的代码和代码评论。我使用 checkout object 作为示例代码。您可以根据需要进行调整。
// declare 2 vars to create strings - that will be converted to arrays later
{% assign product_type = "" %}
{% assign product_count = "" %}
// iterate over line_items in checkout to build product_type string
{% for line_tem in checkout.line_items %}
// if product_type exists , then skip -- unique product types
{% if product_type contains line_tem.product.type%}
{% else %}
{% assign product_type = product_type | append: '#' | append: line_tem.product.type %}
{% endif %}
{% endfor %}
// remove first extra hash and convert to array
{% assign product_type = product_type | remove_first: "#" | split: '#' %}
// iterate over unique product type array generated earlier
{% for product_type_item in product_type %}
// set product count for this product type to zero initially
{% assign total_count = 0 %}
// iterate over all lin items and +1 if same product type
{% for line_tem in checkout.line_items %}
{% if product_type_item == line_tem.product.type%}
{% assign total_count = total_count | plus: 1 %}
{% endif %}
{% endfor %}
// append count to product count string
{% assign product_count = product_count | append: '#' | append: total_count %}
{% endfor %}
// remove first extra hash and convert to array
{% assign product_count = product_count | remove_first: "#" | split: '#'%}
{{-product_type-}}
{{-product_count-}}