উত্তর:
টুইগে এটি করার ভাল কোনও উপায় নেই। তবে, মার্জ ফিল্টার ব্যবহার করে এটি সম্ভব:
{% set arr = arr|merge({'element': 'value'}) %}
.
এবং []
টুইগের মধ্যে খুব একই রকম এবং আমি ভুল ছিল। আমি এটি সন্ধান করেছি এবং আমার উত্তর সম্পাদনা করেছি।
'element'
। আমি নীচে @ লিভ্যাক্সের উত্তর পেয়েছি। সুতরাং, এটি হবে {% set arr = arr|merge({(key): 'value'}) %}
।
{{ UI.button({'type':'submit'}) }}
এবং এই সমস্ত ম্যাক্রো ব্যবহার করে | ডিফল্ট প্যারামগুলি সেট করার জন্য মার্জ করে, সুতরাং
আমি এই সমস্যায় পড়েছি কিন্তু 'এলিমেন্ট' এর মতো এসোসিয়েটিভ ইনডেক্সের পরিবর্তে পূর্ণসংখ্যা সূচক তৈরি করার চেষ্টা করছিলাম।
()
মার্জ ফিল্টার ব্যবহার করে আপনাকে নিজের সূচি কীটিও রক্ষা করতে হবে :
{% set arr = arr|merge({ (loop.index0): 'value'}) %}
আপনি এখন পছন্দসই সূচি কী পছন্দ করতে পারেন ('element'~loop.index0)
যদি প্রাথমিককরণ কেবল প্রয়োজন:
{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}
আমি @ লিভ্যাক্সের উত্তরটি চেষ্টা করেছি তবে এটি কার্যকর হয় না, এমন একটি অ্যারে মার্জ করে যেখানে কীগুলি সংখ্যাসূচক কাজ করে ( https://github.com/twigphp/Twig/issues/789 )।
এটি কেবল তখনই কাজ করবে যখন কীগুলি স্ট্রিং থাকে
আমি যা করেছি তা হ'ল temp
প্রাথমিক টেবিল ( t
) থেকে অন্য টেবিলটি ( ) তৈরি করুন এবং কীগুলি একটি স্ট্রিং তৈরি করুন, উদাহরণস্বরূপ:
{% for key , value in t%}
{% set temp= temp|merge({(key~'_'):value}) %}
{% endfor %}
t
কীগুলি: 0, 1, 2 ..
temp
কীগুলি: 0_, 1_, 2_ ....
{% set links = {} %}
{# Use our array to wrap up our links. #}
{% for item in items %}
{% set links = links|merge({ (loop.index0) : {'url': item.content['#url'].getUri(), 'text': item.content['#title']} }) %}
{% endfor %}
{%
set linkList = {
'title': label,
'links': links
}
%}
{% include '<to twig file>/link-list.twig'%}
এই থ্রেডের জন্য ধন্যবাদ - আমি (loop.index0) দিয়ে একটি অ্যারে তৈরি করতে এবং ডানদিকে পাঠাতে সক্ষম হয়েছি।
আমি এই সমস্যাটি খুব বিরক্তিকর পেয়েছি এবং আমার সমাধান সম্ভবত গোঁড়া এবং টুইগ দর্শনের সাথে মিল নয় তবে আমি নিম্নলিখিতটি বিকাশ করেছি:
$function = new Twig_Function('set_element', function ($data, $key, $value) {
// Assign value to $data[$key]
if (!is_array($data)) {
return $data;
}
$data[$key] = $value;
return $data;
});
$twig->addFunction($function);
যা নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:
set% সেট আরার = সেট_ইলেট (অ্যারে, 'এলিমেন্ট', 'মান')%
কেবল এটির মতো ব্যবহার করুন {% set arr={'key':'value'} %}
(এর পরে কোনও ফাঁকা জায়গা নেই :
), এটি ভাল কাজ করে।
তবে যখন আমি এটিকে একটি অ্যারে তৈরি করতে লুপের অভ্যন্তরে ব্যবহার করি তখন এটি সুযোগের বাইরে কাজ করে না।
{% for group in user.groups %}
{% set foo={'loop.index0':'group.id'} %}
{% set title={'loop.index0':'group.title'} %}
{{ title }} //it work
{% else %}
{% set foo={'0':'-1'} %}
{% set title={'0':'未分组'} %}
{% endfor %}
{{ title }} //it does not work, saying title is not defined
আমার কিছুদিন আগে এই সমস্যা হয়েছিল। আপনার মতো এইরকম একটি অ্যারে রয়েছে তা কল্পনা করুন:
data = {
'user': 'admin',
'password': 'admin1234',
'role': 'admin',
'group': 'root',
'profile': 'admin',
'control': 'all',
'level': 1,
'session': '#DFSFASADASD02',
'pre_oa': 'PRE-OA',
'hepa_oa': 'HEPA-OA',
'pre_ra': 'HEPA-RA',
'hepa_ra': 'HEPA-RA',
'deodor_ra': 'DEODOR-RA'
}
সুতরাং, আপনি এই তথ্যটি দুটি সারিতে দেখাতে চান, তবে সেই তালিকা থেকে পাসওয়ার্ড সরিয়ে ফেলুন। এই লক্ষ্যে, 2 টি অ্যারেতে বিভক্ত করা slice
ফিল্টারটি দিয়ে সহজ হবে । তবে, আমাদের পাসওয়ার্ডটি সরিয়ে ফেলতে হবে। যে কারণে, আমি এই স্নিপেট ব্যবহার করছি। ধারণাটি হল সমস্ত উপাদানগুলিকে data
2 এর সাথে ভাগ করে দেওয়া উপাদানগুলির আকারের চেয়ে কম রাখা this এটি গণনা করতে আমরা ফিল্টারটি ব্যবহার করি length
। এখন আমরা ব্যবহারকারীর বর্তমান উপাদানটির সূচক পেতে loop.index
। এবং পরিশেষে আমরা * বাম বা ডান অ্যারেতে একটি সহযোগী উপাদান ধাক্কা। একটি সহযোগী অ্যারেতে দুটি উপাদান রয়েছে key
এবং value
। টুইটারে একটি অ্যারে কী উল্লেখ করতে আমরা অপারেটর ()
এবং আমরা এটি ব্যবহার করিmerge
এখানে প্রদর্শিত হিসাবে অ্যারের মধ্যে ধাক্কা দেওয়ার জন্য ফিল্টারটি{% set left_list = left_list|merge({ (key): value }) %}
এটি সম্পূর্ণ সমাধান।
{% set left_list = {} %}
{% set right_list = {} %}
{% set limit = data|length // 2 %}
{% for key, value in data|cast_to_array %}
{% if key != 'password' %}
{% if loop.index <= limit %}
{% set left_list = left_list|merge({ (key): value }) %}
{% else %}
{% set right_list = right_list|merge({ (key): value }) %}
{% endif %}
{% endif %}
{% endfor %}
{% for key, value in left_list %}
<p>
<label for="{{key}}">{{key}}</label>
<input type="text" name="{{key}}" id="{{key}}" value="{{value}}"
class="text ui-widget-content ui-corner-all">
</p>
{% endfor %}