টুইগ থেকে অ্যারের উপাদান নির্ধারণ করা হচ্ছে


125

আমি কীভাবে টুইগ থেকে ইতিমধ্যে বিদ্যমান অ্যারের সদস্য সেট করতে পারি?

আমি এটি পরবর্তী উপায়ে করার চেষ্টা করেছি:

{% set arr['element'] = 'value' %}

তবে আমি নিম্নলিখিত ত্রুটি পেয়েছি:

এতে "অপ্রত্যাশিত টোকেন" বিরামচিহ্ন "" "" ("বিবৃতি ব্লকের শেষ" প্রত্যাশিত) ...

উত্তর:


210

টুইগে এটি করার ভাল কোনও উপায় নেই। তবে, মার্জ ফিল্টার ব্যবহার করে এটি সম্ভব:

{% set arr = arr|merge({'element': 'value'}) %}

"।" - বিবৃতি "[]" হিসাবে একই, সুতরাং এটি সমাধান নয়
ফালিনস্কি

@ ফালিনস্কি আপনি ঠিক বলেছেন .এবং []টুইগের মধ্যে খুব একই রকম এবং আমি ভুল ছিল। আমি এটি সন্ধান করেছি এবং আমার উত্তর সম্পাদনা করেছি।
পল

17
আমি প্রতিস্থাপনে গতিশীল ভেরিয়েবল কী সংজ্ঞায়নের জন্য একটি উপায় খুঁজছিলাম 'element'। আমি নীচে @ লিভ্যাক্সের উত্তর পেয়েছি। সুতরাং, এটি হবে {% set arr = arr|merge({(key): 'value'}) %}
সিথু

এটি এত নির্বোধ। টুইগ কেন অ্যারে মানগুলি সেট করার ক্ষমতাটিকে অনুমতি দেয় না?
ম্যাট কাভানাগ

1
@ ম্যাটক্যাভানাগ কারণ দেখুন ফাইলগুলি (যেমন ট্যুইগ) ব্যবসায়িক যুক্তি রাখার কথা নয়, এটি শেষ পর্যন্ত মডেলটিতে পরিচালনা করা উচিত। দৃশ্যটি সত্যিই কেবল যা আছে তা রেন্ডার করার কথা। বিষয়টি যদিও আমার ক্ষেত্রে, এবং কেন আমি আপনার সাথে একমত হই তা হ'ল আমি ইউআই অবজেক্টগুলি রেন্ডার করার জন্য টুইগ ম্যাক্রোগুলি তৈরি করি। {{ UI.button({'type':'submit'}) }}এবং এই সমস্ত ম্যাক্রো ব্যবহার করে | ডিফল্ট প্যারামগুলি সেট করার জন্য মার্জ করে, সুতরাং
এটির

79

আমি এই সমস্যায় পড়েছি কিন্তু 'এলিমেন্ট' এর মতো এসোসিয়েটিভ ইনডেক্সের পরিবর্তে পূর্ণসংখ্যা সূচক তৈরি করার চেষ্টা করছিলাম।

()মার্জ ফিল্টার ব্যবহার করে আপনাকে নিজের সূচি কীটিও রক্ষা করতে হবে :

{% set arr = arr|merge({ (loop.index0): 'value'}) %} 

আপনি এখন পছন্দসই সূচি কী পছন্দ করতে পারেন ('element'~loop.index0)


আপনি যখন গতিশীলভাবে কীগুলি সন্নিবেশ করানোর চেষ্টা করবেন তখন এটিই আসল সমাধান, ধন্যবাদ লিভাক্স!
নিকোলালিয়াস

19

যদি প্রাথমিককরণ কেবল প্রয়োজন:

{% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %}

9
এই প্রশ্ন ছিল না।
redreinard

2

আমি @ লিভ্যাক্সের উত্তরটি চেষ্টা করেছি তবে এটি কার্যকর হয় না, এমন একটি অ্যারে মার্জ করে যেখানে কীগুলি সংখ্যাসূচক কাজ করে ( 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_ ....


একই সমস্যা, এখন পর্যন্ত কোনও সমাধান নেই।
TyrionGraphiste

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) দিয়ে একটি অ্যারে তৈরি করতে এবং ডানদিকে পাঠাতে সক্ষম হয়েছি।


1

আমি এই সমস্যাটি খুব বিরক্তিকর পেয়েছি এবং আমার সমাধান সম্ভবত গোঁড়া এবং টুইগ দর্শনের সাথে মিল নয় তবে আমি নিম্নলিখিতটি বিকাশ করেছি:

$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% সেট আরার = সেট_ইলেট (অ্যারে, 'এলিমেন্ট', 'মান')%


1

কেবল এটির মতো ব্যবহার করুন {% 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

1
আপনি যদি লুপটির
user2019515

5
এটি সব ধরণের ভুল। কোলনের পরে স্থানটি কোনও ব্যাপার নয়। আপনি নতুন অ্যারে তৈরি করছেন, অ্যারেতে কোনও উপাদান সেট করছেন না যা ছিল প্রশ্ন। আপনি {ray অ্যারে} like এর মতো কোনও অ্যারে আউটপুট করতে পারবেন না, এটি একটি ত্রুটি তৈরি করবে। এই উত্তরটি ব্যর্থ এবং জিজ্ঞাসিত প্রশ্নের সাথে সম্পর্কিত নয় full
redreinard

3
আমি বুঝতে পারছি না কেন এটির উপরোক্ত মতামত রয়েছে, যেমন উপরে বলা হয়েছে, প্রায় এই "উত্তর "
টিতে

0

আমার একটি মাল্টি ডাইমেনশন অ্যারে ছিল। আমি যে সমাধানটি সন্ধান করতে পেরেছিলাম তা হল একটি নতুন অস্থায়ী অ্যারে তৈরি করা এবং তথ্য আপডেট করা / যুক্ত করা , যা আরও একটি টুইগ ফাংশনে স্থানান্তরিত হয়েছিল।


0

আমার কিছুদিন আগে এই সমস্যা হয়েছিল। আপনার মতো এইরকম একটি অ্যারে রয়েছে তা কল্পনা করুন:

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ফিল্টারটি দিয়ে সহজ হবে । তবে, আমাদের পাসওয়ার্ডটি সরিয়ে ফেলতে হবে। যে কারণে, আমি এই স্নিপেট ব্যবহার করছি। ধারণাটি হল সমস্ত উপাদানগুলিকে data2 এর সাথে ভাগ করে দেওয়া উপাদানগুলির আকারের চেয়ে কম রাখা 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 %}

0

আপনি নিম্নলিখিত বাক্য গঠন ব্যবহার করতে পারেন:

{% set myArray = myArray + myArray2 %}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.