كيف يمكنني إنشاء أرقام عشوائية فريدة في PHP؟

StackOverflow https://stackoverflow.com/questions/674113

  •  21-08-2019
  •  | 
  •  

سؤال

أنا أعمل على وحدة MCQ وأحتاج إلى جلب أسئلة عشوائية من قاعدة البيانات الخاصة بي.المشكلة هي أنه يبدو أنني أحصل على نسخ مكررة.

هل كانت مفيدة؟

المحلول

إذا كنت جلب لهم من قاعدة البيانات، استخدام SQL للقيام بعملك. مثلا جلب 20 سؤالا عشوائية (بدون تكرار):

SELECT * FROM questions ORDER BY RAND() LIMIT 20

نصائح أخرى

يبدو أنك تريد خلط الأسئلة عشوائيًا، وليس الوصول إليها بشكل عشوائي.لذلك ستكون الخوارزمية الخاصة بك شيئًا من هذا القبيل.

  1. احصل على جميع الأسئلة (أو مفاتيح الأسئلة) التي تريد عرضها.
  2. خلط ورق اللعب لهم
  3. استرداد/عرض فيها بالترتيب العشوائي

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

إذا كنت تستخدم الخلية وكان لديك كمية صغيرة معقول من البيانات، يمكنك استخدام ORDER BY RAND ()

هل عديمي الجنسية المولدات رقم عشوائي موجود؟

وأي تسلسل أرقام شبه عشوائي سوف تتكرر في نهاية المطاف. كيف الحصول على أرقام شبه عشوائي لديك؟

ودون أي مزيد من المعلومات يمكنني أن أقترح حلا بدائية. (ولكن يرجى تحديث سؤالك مع مزيد من المعلومات)

وانا التخمين لديك المستخدمين، لأن ثم هل يمكن انقاذ في جدول (سواء كانت مؤقتة أو لا)، ما هي الأسئلة وقال المستخدم قد حصلت بالفعل.

إذا لم يكن لديك المستخدمين، يمكنك استخدام SESSION_ID كمعرف المستخدم لهذا المستخدم.

وحتى عندما جلب سؤال لأول مرة، والمستخدم يجيب عليه، فإنه يحفظ المعلومات التي تحتاج إلى حفظ، ثم هوية المستخدم وهوية السؤال لفي جدول.

عند جلب السؤال التالي، كنت تفعل الاختيار لمعرفة ما إذا كان المستخدم لديه أن معرف السؤال في هذا الجدول الجديد.

إذا كان لديك عدد كبير جدا من الصفوف يمكنك إضافة عمود إلى الجدول الذي يقوم بتخزين رقم بين 0 و 1 و ثم تجلب مع استعلام:

SELECT * FROM `mytable` WHERE `randcolumn` > RAND() LIMIT 20

وهذا يعني أنه ليس لديها قاعدة البيانات الخاصة بك على النظام عشوائيا الجدول بأكمله لتوفير سوى 20 الصفوف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top