Есть ли альтернатива PHP In_array() в Shopify?

Я пробовал много вещей, но не получил то, что именно я ищу.

Ниже приведен пример того, какой тип массива я ищу в Shopify,

$массив['сумка'] = 2; $массив['обувь'] = 3; $массив['xyz'] = 6;

Вот пример того, что и как я ищу свою переменную массива в shopify.

Где

сумка, обувь, xyz

тип продукта

и 2,3,6

количество продуктов, добавленных для определенного типа продукта.

Я знаю, что это легко сделать в PHP, но не знаю, как это сделать в жидком коде Shopify.


person Chandresh M    schedule 01.07.2019    source источник


Ответы (1)


Согласно документации Shopify, вы не можете инициализировать массивы. Однако вы можете использовать разделить фильтр, чтобы создать один размерный массив. Вы не можете создавать ассоциативные массивы, используя это. Однако в качестве обходного пути используйте 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

Для вашего конкретного сценария, описанного в комментариях, взгляните на приведенный ниже код и комментарии к коду. Я использовал объект проверки в качестве примера кода. Вы можете настроить в соответствии с вашими потребностями.

// 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-}}
person Bilal Akbar    schedule 01.07.2019
comment
Я хочу подсчитывать продукты на основе типа продукта. означает, что в цикле я хочу проверить, сколько всего продуктов добавлено в корзину с одинаковыми типами продуктов. т. е. если продукты с типами пакетов 2, то $array['bag'] = 2; если продукт с обувью product_type равен 3, то $array['shoes'] = 3; и т.д.... так как я могу сделать это анемично. не статически, как вы упомянули выше. - person Chandresh M; 01.07.2019
comment
Привет @Bilal, это была отличная идея, которую ты подал, и она отлично работает для меня. Большое спасибо. +1 и тоже принято. - person Chandresh M; 01.07.2019