เพิ่มองค์ประกอบอาร์เรย์ลงในตัวแปรใน Twig

ฉันเก็บการตั้งค่าบางอย่างไว้ในอาร์เรย์ใน Twig และฉันต้องเก็บไว้ในตัวแปรบางตัวเพื่อให้สามารถพิมพ์ได้ อาร์เรย์ของฉันมีคุณลักษณะข้อมูลบางอย่างดังนี้:

{% set data = {
    visible:    { data: "data-visible-items", value: options.visible_items },
    scroll: { data: "data-itemes-scroll", value: options.items_to_scroll },
    speed: { data: "data-animation-speed", value: options.animation_speed },
    infinite: { data: "data-infinite", value: options.infinite },
    autoplay: { data: "data-autoplay", value: options.autoplay_enable },
    interval: { data: "data-autoplay-interval", value: options.autoplay_interval },
    hover: { data: "data-autoplay-hover", value: options.autoplay_hover },
} %}

ฉันแค่ต้องการเก็บทุกอย่างจากอาร์เรย์ไว้ในตัวแปรตัวเดียว ในตัวแปรนี้จำเป็นต้องจัดเก็บแบบนี้ (ตัวคั่นคือช่องว่าง) เช่น:

data-visible-items="5" data-items-scroll="2" data-animation-speed="400" data-infinite="0" data-autoplay="1" data-autoplay-interval="3000" data-autoplay-hover="1"

ดังนั้น หากตัวแปรเป็นตัวอย่าง attributes ฉันแค่อยากจะพิมพ์ออกมาแบบนี้:

<div{{ attributes}}>
// Content
</div>

ฉันเขียน for loop ดังนี้:

{% for item in data %}
    {{ item.data }} {{ item.value }}
{% endfor %}

และมันจะพิมพ์ข้อมูลและค่าแต่ละรายการ แต่จะเก็บสิ่งนี้ไว้ในตัวแปรตามที่อธิบายไว้ข้างต้นได้อย่างไร


person mixerowsky    schedule 02.08.2017    source แหล่งที่มา


คำตอบ (2)


หากคุณต้องการบันทึกลงในตัวแปร คุณสามารถทำได้ดังนี้:

{% for item in data %}
    {% set myvar = item.data ~ ' ' ~ item.value %}
{% endfor %}
person Med    schedule 02.08.2017
comment
ไม่มีตัวแปร myvar อยู่นอกลูป และคุณเขียนทับมันในแต่ละครั้ง จึงไม่สร้างสตริงที่มีตัวแปรทั้งหมดอยู่ข้างใน - person DarkBee; 03.08.2017
comment
ดังที่ OP กล่าว เขาต้องการพิมพ์ var โดยใช้บางอย่างเช่น ‹div{{ var}}› เพื่อให้เขาสามารถทำสิ่งนี้ในลูป เขาไม่ได้ระบุว่าเขาต้องการเก็บไว้นอกลูป... - person Med; 03.08.2017
comment
อ้างจากคำถามของ OP Simply I want to store everything from array in one variable, in this variable - person DarkBee; 03.08.2017

หากคุณต้องการแปลงอาร์เรย์นั้น คุณสามารถใช้ Twig_Filter หรือ Twig_Function

  1. เพียงเชื่อมโยง http_build_query

PHP

$twig->addFunction(new Twig_SimpleFunction('http_build_query', http_build_query', ['is_safe' => [ 'html', ],]));

กิ่ง

<div{{ http_build_query(attributes, '', ' ') }}>
  1. สร้างสตริงด้วยตัวเองด้วย foreach

PHP

$twig->addFilter(new Twig_SimpleFilter('build_attribute_list', function (array $array) {
    $str = '';
    foreach($array as $key => $val) $str .= ' '.$key.'="'.$val.'"';
    return $str;
}, ['is_safe' => ['html'],]);

กิ่ง

<div{{ attributes|build_attribute_list }}>

(แก้ไข) ไม่จำเป็นต้องบอกว่าคุณสามารถจัดเก็บเอาต์พุตไว้ในตัวแปรได้เช่นกัน

{% set my_var = attributes|build_attribute_list %}
{{ my_var }}
person DarkBee    schedule 02.08.2017