SMARTY: проверьте, находится ли значение в многомерном массиве - PullRequest
1 голос
/ 06 декабря 2011

У меня есть этот многомерный массив в smarty:

attribute => Array (16)
  25 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Blue"
      id_product_attribute => "25"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "25"
  26 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Blue"
      id_product_attribute => "26"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "26"
  27 => Array (2)
    0 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "27"
    1 => Array (3)
      public_group_name => "Color"
      attribute_name => "Yellow"
      id_product_attribute => "27"
  28 => Array (2)
    0 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "28"
    1 => Array (3)
      public_group_name => "Color"
      attribute_name => "Yellow"
      id_product_attribute => "28"
  29 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Metal"
      id_product_attribute => "29"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "29"
  30 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Metal"
      id_product_attribute => "30"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "30"
  32 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Black"
      id_product_attribute => "32"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "32"
  33 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Orange"
      id_product_attribute => "33"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "33"
  34 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Orange"
      id_product_attribute => "34"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "34"
  35 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Pink"
      id_product_attribute => "35"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "35"
  36 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Pink"
      id_product_attribute => "36"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "36"
  39 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Green"
      id_product_attribute => "39"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "39"
  40 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Green"
      id_product_attribute => "40"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "40"
  41 => Array (2)
    0 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "41"
    1 => Array (3)
      public_group_name => "Color"
      attribute_name => "Purple"
      id_product_attribute => "41"
  42 => Array (2)
    0 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "8Go"
      id_product_attribute => "42"
    1 => Array (3)
      public_group_name => "Color"
      attribute_name => "Purple"
      id_product_attribute => "42"
  31 => Array (2)
    0 => Array (3)
      public_group_name => "Color"
      attribute_name => "Black"
      id_product_attribute => "31"
    1 => Array (3)
      public_group_name => "Disk space"
      attribute_name => "16Go"
      id_product_attribute => "31"

Я могу отобразить весь массив благодаря этому решению ссылка :

{foreach from=$product.attribute key='id_attribute' item='attribute'} 

<li>

    {foreach from=$attribute key='id_property' item='property'} 
        {$property.public_group_name}
        {$property.attribute_name}
    {/foreach}

</li>

{/ foreach}

Результат примерно такой:

  • Цвет Синий Дисковое пространство 16Go
  • Цвет Синий Дисковое пространство 8Go
  • Дисковое пространство 16Go Цвет Желтый
  • Место на диске 8Go Цвет Желтый
  • Цвет Металл Место на диске 16Go
  • Цвет Металл Место на диске 8Go
  • Цвет Черный Место на диске 8Go
  • Цвет ОранжевыйДисковое пространство 16Go
  • Цвет Оранжевый Дисковое пространство 8Go
  • Цвет Розовый Дисковое пространство 16Go
  • Цвет Розовый Дисковое пространство 8Go
  • Цвет Зеленый Дисковое пространство 16Go
  • Цвет Зеленый Дисковое пространство 8Go
  • Дисковое пространство 16Go Цвет Фиолетовый
  • Дисковое пространство 8Go Цвет Фиолетовый
  • Цвет Черный Дисковое пространство 16Go

Теперь я хочу отобразить результат, только если строка содержит «Синий».Этот массив не будет отображаться, потому что он имеет атрибут name = Orange:

33 => Array (2)
        0 => Array (3)
          public_group_name => "Color"
          attribute_name => "Orange"
          id_product_attribute => "33"
        1 => Array (3)
          public_group_name => "Disk space"
          attribute_name => "16Go"
          id_product_attribute => "33"

Как я могу это сделать?С помощью in_array я могу проверить, находится ли значение в многомерном массиве?

Thx

1 Ответ

1 голос
/ 06 декабря 2011

Я думаю, что это может сделать работу:

{foreach from=$product.attribute key='id_attribute' item='attribute'} 
{* 
  Test if the first or second element of this array has 
    public_group_name  "Color" 
    attribute_name "Blue"
*}
{if ($attribute[0].public_group_name == "Color" && $attribute[0].attribute_name == "Blue") || ($attribute[1].public_group_name == "Color" && $attribute[1].attribute_name == "Blue")}
<li>

    {foreach from=$attribute key='id_property' item='property'} 
        {$property.public_group_name}
        {$property.attribute_name}
    {/foreach}

</li>
{/if}
{/foreach}
...