Как на FENOM узнать количество записей с определенным числом в массиве?

Приветствую, друзья, подскажите пожалуйста, как в массиве, проверить сколько параметров со определенным значением?

Знаю как проверить количество записей в массиве {set $count = count($array)}
Но мне нужно, в этом массиве, узнать сколько опубликованных записей.

В массиве MIGX tv есть разные параметры, но есть параметр чекбокс который отвечает за публикацию записи, если опубликовано то 1, если нет то 0
$item.published
Вывожу так
{var $plus = $_modx->resource.field_plus | fromJSON}
{if $plus}
{foreach $plus as $idx => $item}
{if $idx =='8'}{break}{/if}
{if $item.published !=0}
 <div class="plus__item plus-item">
     {$item.text}
{/if}
{/foreach}
{/if}
Но вот как узнать сколько в массиве $item.published равных 1?
Роман
25 ноября 2022, 18:31
modx.pro
824
0

Комментарии: 15

vectorserver
25 ноября 2022, 18:53
0
Используй постфиксный инкремент:
{var $plus = $_modx->resource.field_plus | fromJSON}
{var $count_pub = 0}
{if $plus}
{foreach $plus as $idx => $item}
{if $idx =='8'}{break}{/if}
{if $item.published !=0}
{$count_pub++}
 <div class="plus__item plus-item">
     {$item.text}
{/if}
{/foreach}
{/if}
COUNT: {$count_pub++}
via: github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#операторы-инкремента-и-декремента
    Роман
    25 ноября 2022, 19:04
    -1
    Не понимаю, это просто счетчик. $count_pub. Я пытаюсь как то узнать сколько в массиве параметров published равных 1
      vectorserver
      25 ноября 2022, 19:22
      0
      Я тебе и показал это!
        Роман
        25 ноября 2022, 20:01
        0
        Не могу получить количество $item.published равных 1 таким способом
          Alexey
          25 ноября 2022, 20:35
          0
          А если два плюса в последней строке убрать?
            Роман
            25 ноября 2022, 20:43
            0
            Он считает итерации, толку от этого нет, а мне нужно из массива достать параметр published и посчитать сколько таких параметров равны 1
              vectorserver
              25 ноября 2022, 20:58
              1
              0
              без итераций никак!
              {var $count_pub = 0}
              {var $plus = $_modx->resource.field_plus | fromJSON}
              {if $plus}
                  {foreach $plus as $idx => $item}
                      {if $item.published ==1}
                      {$count_pub++}
                  {/foreach}
                  RETURN COUNT: {$count_pub}
              {/if}
                Роман
                16 января 2023, 02:42
                0
                А не подскажете, в вашем примере увеличение счетчика так {$count_pub++} это работает, но эта переменная выводиться цифрой на сайте, как сделать что-бы она не выводилась? Пробовал так прописать {include $count_pub++} и так пробовал
                {include ++$count_pub} так не выводиться но в обоих случаях ошибка в логах, php ругается на это :( как правильно прописать увеличение переменной что бы она не выводилась на сайте?
                  vectorserver
                  16 января 2023, 06:50
                  0
                  Ага, мой косяк)))
                  Вот так:
                  {var $count_pub++}
                    Роман
                    16 января 2023, 11:47
                    0
                    {var $count_pub++} вызывает ошибку fenom вообще, белый лист.
                      vectorserver
                      16 января 2023, 12:05
                      1
                      +1
                      Сорян нужное указывать
                      {var $count_pub+=1}
                      )))
                      {var $count_pub = 0}
                      {var $plus = [
                          ["published" => 1,"name"=>"dsdsds"],
                          ["published" => 1,"name"=>"xdsdsds"],
                      ]}
                      
                      {if $plus}
                          {foreach $plus as $idx => $item}
                             {if $item.published ==1}
                                  {var $count_pub+=1}
                                  {$item.name}
                              {/if}
                          {/foreach}
                          RETURN COUNT: {$count_pub}
                       {/if}
                        Роман
                        16 января 2023, 12:22
                        0
                        Благодарю! Все работает!
                vectorserver
                25 ноября 2022, 21:00
                0
                тогда подготовь массив таким образом чтобы выводились только published! и не е*и мозг!
                Группируй массив по ключу
                {var $plus = $_modx->resource.field_plus | fromJSON  | groupBypublished }
                Сниппет groupBypublished:
                <?php
                function _group_by($array, $key) {
                    $return = array();
                    foreach($array as $val) {
                        $return[$val[$key]][] = $val;
                    }
                    return $return;
                }
                return _group_by($input, 'published');
                  Роман
                  25 ноября 2022, 21:23
                  0
                  Ок благодарю! Буду пробовать так
      Алексей Смирнов
      25 ноября 2022, 19:46
      0
      Только проблема в том что как только найдется $idx==8 то корректность посчета становиться сомнительна. те нужно исключить строку с
      {if $idx =='8'}{break}{/if}
      и тогда подсчет будет более точным. :)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        15