الدالة mt_rand()‎ في PHP

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث

(PHP 4, PHP 5, PHP 7)

تولِّد الدالة mt_rand()‎ عددًا صحيحًا شبه عشوائي (pseudo-random integer) وتعيده وذلك باستعمال خوارزميَّة Mersenne Twister.

الوصف

int mt_rand ( void )
int mt_rand ( int $min , int $max ))

تنبيه: لا تولِّد هذه الدالة أي قيم آمنة، لذا لا يجب استعمالها لغرض التشفير مطلقًا. إن أردت توليد قيم آمنة مشفَّرة، فاستعمل الدالة random_int()‎ أو الدالة random_bytes() أو الدالة openssl_random_pseudo_bytes()‎.

تعيد معظم الخوارزميات التي تستعملها الدوال التابعة لمكتبة libcs لتوليد أعداد عشوائيَّة قيمًا مريبة أو ذات خصائص غير معروفة وتكون بطيئة في توليد الأعداد بعض الشيء. إن وازنَّا الدالة mt_rand()‎ مع الدالة rand()‎، نجد أنَّ الأولى تستعمل خوارزميَّة Mersenne Twister لتوليد أعداد شبه عشوائيَّة ذات خصائص معلومة وتُنفَّذ بطريقة أسرع بأربع أضعاف بالموازنة مع الخوارزميَّة التي تستعملها الدالة الثانية، لذا نجد أنَّ الدالة mt_rand()‎ حلت مكان الدالة rand()‎ التابعة لمكتبة libcs.

تعيد الدالة mt_rand()‎ عددًا شبه عشوائي تنحصر قيمته بين 0 وقيمة الدالة mt_getrandmax()‎ إن استدعيت دون تمرير المعاملين الاختياريين min و max. أمَّا إن أردت توليد عدد عشوائي تنحصر قيمته في مجال محدَّد، فاستعمل المعامل min والمعامل max لتحديد ذلك المجال.

المعاملات

min

أدنى قيمة يمكن أن تعيدها الدالة. قيمته الافتراضيَّة هي 0.

max

أعلى قيمة يمكن أن تعيدها الدالة. قيمته الافتراضيَّة هي قيمة الدالة mt_getrandmax()‎.

القيم المعادة

يُعاد عددًا صحيحًا شبه عشوائي يتراوح مجاله بين 0 - mt_getrandmax()‎ إن لم يمرَّر أي معامل أو يترواح مجاله بين max - min في حال تحديد قيم هذين المعاملين. إن كانت قيمة المعامل max أصغر من قيمة المعامل min، فستُعاد القيمة FALSE.

سجل التغييرات

الإصدار الوصف
7.2.0 إصلاح خطأ يتعلق بجعل القيم غير موزعة بانتظام أي منحازة باتجاه متتالية معيَّنة (modulo bias). هذا يعني أنَّ سلسلة الأعداد المولدة باستعمال بذرة محدَّدة قد تختلف عن تلك المولدة باستعمال إصدار PHP 7.1 على نظام ذو 64 بت.
7.1.0 أصبحت الدالة rand()‎ اسمًا بديلًا (alias) عن الدالة mt_rand()‎أي أنَّها تشير إليها.
7.1.0 تستعمل الدالة mt_rand()‎ النسخة المعدَّلة الصحيحة من خوارزميَّة Mersenne Twister. يمكن الرجوع إلى النسخة السابقة -ما قبل التعديل- بتحديد الثابت MT_RAND_PHP للمعامل mode في الدالة mt_srand().
5.3.4 إظهار الخطأ E_WARNING وإعادة القيمة FALSE إن كانت قيمة max أصغر من قيمة min أي max < min.

أمثلة

المثال 1: استعمال الدالة mt_rand()‎

<?php
echo mt_rand() . "\n";
echo mt_rand() . "\n";

echo mt_rand(5, 15);
?>

سيُظهر المثال السابق نتيجة شبيه بالنتيجة التالية:

1604716014
1478613278
6

ملاحظات

يجب أن تكون قيمة المعامل min والمعامل max أصغر من قيمة الدالة mt_getrandmax()‎ أي ضمن المجال 0 - mt_getrandmax()‎. قد يؤدي اختيار قيم أعلى من هذا المجال إلى إعادة أعداد عشوائيَّة ذات دقة سيئة.

انظر أيضًا

مصادر