ARRAY#: المصفوفة

يمكن لعلامة #ARRAY ان تحتوي مصفوفة PHP، اي مجموعة من الأزواج المؤلفة من مفتاح/قيمة يمكن تخزينها لاستخدامها لاحقاً في الصفحة النموجية.

يجب ان يتم الإعلان عن المصفوفة بواسطة علامة #SET ويمكن استرجاعها لاحقاً بواسطة علامة #GET [1].

يمكن استخدام المصفوفة بعد ذلك بإشراكها مثلاً مع معيار IN في حلقة.

إعلان مصفوفة واسترجاع قيم

 #SET{my_array, #ARRAY{مفتاح١,قيمة١,مفتاح٢,قيمة٢}}
ينشئ متغير my_array ويخصص له مصفوفة PHP كقيمة يمكن عرضها هكذا:

مفاتيحقيم
مفتاح١ قيمة١
مفتاح٢ قيمة٢

ليس من الضروري إحاطة سلاسل النصوص بعلامات اقتباس مفردة او مزدوجة الا اذا اردنا الدلالة الى سلسلة فارغة تكتب ’’.

 يمكن لأهداف اختبارية، عرض المصفوفة بفضل مرشح |foreach.

فيعرض [(#GET{mon_tableau}|foreach)]:

  • مفتاح١=> قيمة١
  • مفتاح٢=> قيمة٢

 يمكن استرجاع القيمة المناسبة لمفتاح معين باستخدام المرشح |table_valeur هكذا:

[(#GET{my_table}|table_valeur{مفتاح١})] يسترجع قيمة١.

 يمكن التدقيق في وجود قيمة معينة في المصفوفة بواسطة المرشح |find |find [2]

  
[(#GET{my_table}|find{valeur2}|oui)
  هذا ما سيعرض اذا كانت القيمة في المصفوفة.
]

ملء مصفوفة ديناميكياً

من فوائد المصفوفة انه يمكن ملؤها ديناميكياً بقيم ناتجة عن حلقة او حلقات.

يجب اولاً الاعلان عن المصفوفة من خلال #SET قبل الحلقة: #SET{my_table,#ARRAY}

في الحلقة، يقوم أمر #SET آخر بإعادة تعريف my_table في كل تكرار للحلقة ونستعيد المصفوفة بواسطة #GET لإضافة قيمة جديدة اليها بفضل مرشح |push او |array_merge حسب الحاجة.

  
#SET{my_table,#ARRAY}
<BOUCLE(...)>
    #SET{my_table, #GET{my_table}|push{#COMPTEUR_BOUCLE}}
</BOUCLE>

ويعتمد ترتيب القيم في المصفوفة على معيار الفرز في الحلقة.

ويكتفي |push بإضافة قيمة جديدة في آخر المصفوفة. ويتم فهرسة مفتاح القيمة آلياً بحيث يضاف اليه ١ في كل تكرار للحلقة وذلك ابتداءاً من صفر (المفتاح الاول هو صفر ثم ١، ٢، ٣، ...).

مثال: انشاء مصفوفة selected_keys تحتوي على أرقام #ID_MOT كل المفاتيح المرتبطة بنقال معين.

  
#SET{selected_keys, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
  #SET{selected_keys, #GET{selected_keys}|push{#ID_MOT}}
</BOUCLE_themes>

اذا كانت المفاتيح المرتبطة بهذا المقال تحمل الأرقام ٤ و٩ و١٩ يسترجع (#GETselected_keys المصفوفة:

  • 0=>4
  • 1=>9
  • 2=>18

لاحظ ان [(#GET{selected_keys}|table_valeur{2})] يسترجع ١٨ وهي القيمة المرتبطة بالمفتاح ٢ اي ثالث قيمة في المصفوفة.

 |array_merge تضيف زوج مفتاح/قيمة الى آخر المصفوفة. ويتيح ذلك فرض «اسماء» المفاتيح.

تنبيه (١): اذا ظهر أحد المفاتيح عدة مرات، سيتم الأخذ بآخر قيمة لهذا المفتاح.

تنبيه (٢): لا يمكن للمفتاح الذي يتم «فرضه» ان يكون رقمياً.

هناك حلان لتخطي هذه المحدودية:

 إدخال سابقة نصية على هذا المفتاح:

#SET{selected_keys, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
  [(#SET{selected_keys,#GET{selected_keys}|array_merge{#ARRAY{mot#ID_MOT,#TITRE}}})]
</BOUCLE_themes>

[(#GET{selected_keys}|foreach)] تسترجع:

  • mot4=>تفاح
  • mot9=>موز
  • mot18=>جزر

 عكس المفتاح والقيمة بشرط ان لا تكون القيمة رقمية:

#SET{selected_keys, #ARRAY}
<BOUCLE_themes(MOTS) {id_article}>
  [(#SET{selected_keys,#GET{selected_keys}|array_merge{#ARRAY{#TITRE,#ID_MOT}}})]
</BOUCLE_themes>

[(#GET{selected_keys}|foreach)] تسترجع:

  • تفاح=>4
  • موز=>9
  • جزر=>18

في هذه الحال، يمكن تطبيق دالة php لعكس المصفوفة |array_flip->http://www.php.net/manual/en/function.array-flip.php] كمرشح على المصفوفة النهائىة (بعد الحلقة):

[(#SET{selected_keys, #GET{selected_keys}|array_flip})]

[(#GET{selected_keys}|foreach)] تسترجع إذاً:

  • 4=>تفاح
  • 9=>موز
  • 18=>جزر

استخدام المصفوفة في حلقة بواسطة العامل IN

اذا اخذنا مصفوفة selected_keys التي تحتوي أرقام المفاتيح #ID_MOT، يمكن بعدها تحديد المقالات المرتبطة بالمفاتيح نفسها التي يرتبط بها المقال الأصلي وذلك بفضل .معيار IN

  
#SET{selected_keys, #ARRAY}
<BOUCLE_themes(MOTS){id_article}>
  #SET{selected_keys, #GET{selected_keys}|push{#ID_MOT}}
</BOUCLE_themes>

<BOUCLE_same_themes(ARTICLES) {id_mot IN #GET{selected_keys}}>
  #TITRE <br />
</BOUCLE_same_themes>

يمكن تطبيق هذا الحل في عدة استخدامات خاصة عندما نريد تحديد عناصر بواسطة عدة معايير لا يمكن ان بعودوا الى الحلقة نفسها ثم خلط هذه المعايير بين بعضها بواسطة معيار فرز فريد.

أمثلة لاستخدام المصفوفات

 عرض شرطي حسب الصفحة (قيمة #ENV{page}):

  
[(#ENV{page}|in_array{#ARRAY{0,article,1,rubrique,2,site}}|oui)
عرض شرطي: الصفحة هي صفحة مقال او قسم او موقع. ]

 عرض شرطي حسب متغير تم تمريره في عنوان URL مسبقاً [3]:

  
<BOUCLE_all_keys(MOTS){par titre}{", "}>
  <a href="[(#SELF|parametre_url{dodo,#ID_MOT})]">#TITRE</a>
</BOUCLE_all_keys(>

#SET{thekeys, #ARRAY}
<BOUCLE_some_keys(MOTS){id_article}>
  #SET{thekeys, #GET{thekeys}|push{#ID_MOT}}
</BOUCLE_some_keys>

[<br />سيتم عرض هذا النص اذا كانت قيمةمتغير 'dodo' التي تم تمريرها في عنوان URL موجودة في مصفوفة 'thekeys' التي تم تعريفها وملؤها سابقاً.
  (#ENV{dodo}|in_any{#GET{thekeys}}|oui)]

 تحديد مقالات قسم ما وتلك المرتبطة بمفتاح ما ثم عرض كل تلك المقالات في قائمة حسب تواريخها.

  
#SET{thearticles,#ARRAY}
<BOUCLE_articles_section(ARTICLES){id_rubrique}>
  #SET{thearticles,#GET{thearticles}|push{#ID_ARTICLE}}
</BOUCLE_articles_section>
<BOUCLE_articles_key(ARTICLES){id_mot}>
  #SET{thearticles,#GET{thearticles}|push{#ID_ARTICLE}}
</BOUCLE_articles_key>

<BOUCLE_display(ARTICLES){id_article IN #GET{thearticles}}{par date}>
  <br />#TITRE
</BOUCLE_display>

حواشي

[1أنظرSET# وGET#: تعريف واسترجاع لمزيد من المعلومات

[2يعادل |find دالة php المعروفة in_array ولكن بفارق ان هذا المرشح لا ينتج رسالة الخطأ "Warning : in_array() [function.in-array] : Wrong datatype for second argument." اذا كان المتغير غير موجود في المصفوفة. والحال، عندما يتم انشاء متغير ديناميكياً، لا نعرف دائماً اذا كان هذا المتغير سيوجد واذا كان سيأتي على شكل مصفوفة.

[3أنظر #SELF و|parametre_url لمزيد من التفاصيل.

مؤلف George نُشر في: تم التحديث: 28/07/23

الترجمات: عربي, català, English, Español, français, Nederlands