التكرار حتى الحصول على رقم غير مكرر
السلام عليكم
بهذه المناسبة أحب أن أشارك معكم الدالة التالية, دالة جميلة تقوم بصنع رقم عشوائي كلمات و حروف بالطول و يمكن إضافة حروف أخرى أيضاً, الدالة هي: function random_string( ) { $character_set_array = array( ); $character_set_array[ ] = array( 'count' => 2, 'characters' => 'abcdefghijklmnpqrstuvwxyz' ); $character_set_array[ ] = array( 'count' => 2, 'characters' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ); $character_set_array[ ] = array( 'count' => 2, 'characters' => '0123456789' ); $temp_array = array( ); foreach ( $character_set_array as $character_set ) { for ( $i = 0; $i < $character_set[ 'count' ]; $i++ ) { $temp_array[ ] = $character_set[ 'characters' ][ rand( 0, strlen( $character_set[ 'characters' ] ) - 1 ) ]; } } shuffle( $temp_array ); return implode( '', $temp_array ); } بالنسبة لسؤالي: في حالة مثلا تم توليد رقم عشوائي أريد أن تقوم الدالة بتوليد رقم آخر لغاية ما تصل الى رقم عشوائي غير موجود بقاعدة البيانات و لكن المشكل هو أنه في حالة أن كل الأرقام التي يتم توليدها موجودة بقاعدة البيانات, فالدالة ستبقى تدور لوحدها, أريد طريقة أو شرط في أنه إذا الدالة لم تجد الرقم في وقت معينة تخرج ذاتياً أو تظهر رسالة العودة لاحقاً و شكراً
4 إجابات
salamo Alaikom
to create a random string in PHP use this function: public function generateString($length) { $charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for($i=0; $i<$length; $i++) $key .= $charset[(mt_rand(0,(strlen($charset)-1)))]; return $key; }you can do a loop so many times to query the db to check if a duplicate key is found before using that random key. Something like this: while(++$i < 100) { //query db with random key to see if there is a match //if no match found break out of loop break; } بواسطة: chlieh 0 من 0 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا
الامر ساهل ايضا .. عليك استعمال طريقة static شوف
<?php function test() { static $a = 0; echo $a; $a++; } ?>هذه تضع المتغير a اول مرة تستدعى فيها الدالة ب 0 وبعد ذلك تزيد 1 فمن الممكن استعمالها للتحديد بواسطة: molhm 1 من 1 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا لم أفهم ما تقصد يا ريث لو توضح مشكوراً تستخدم هذه الخاصية لمعرفة عدد تكرار الدالة على ما اعتقد
الموضوع شبه مستحيل
ولكن يبقى ممكن الحل من وجهة نظري تضيف رقم آخر اذا كانت كافة الارقام التي تم توليدها موجودة (^^) function GenID(){ $key = random_string(); $i=0; while($key=$databasestring){ $key.=$i; $i+=1; } } بواسطة: Amer 2 من 2 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا نعم هذه فكرة, أو توليد رقم إضافي جديد
اعتقد انى فهمتك .. عليك استخدام خاصية الدالة المكررة .. اى دالة داخل نفسها شىء كهذا
function GenID(){ $key = random_string(); if(هنا التاكد ان كان موجود فى القاعدة ام لا){ return GenID() } }وتستعمل هذه الدالة بدلا من الدالة الام بواسطة: molhm 1 من 1 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا أعرف, هذا ليس هو الاستفسار! الاستفسار هو أنه في حالة جميع الأكواد التي سيتم توليدها هي موجودة أصلا في قاعدة البيانات, في هذه الحالة الدالة ستبقى تدور في المالانهاية, أريد أن أضيف شرط و أفكر في شرط مثلاً إذا الدالة قامت بالدوران 50 مرة و لم تجد شيء تتوقف و تعود الى الرئيسية |
هههههههه لا زالت تبحث عن صدفة تحدث كل مئة الف سنة .. ولكنى ساحاول
9 / مارس / 2012 الساعة 18:17
لا هذا موضوع آخر, الكود من 6 حروف و أرقام و اود استعماله في سكريبت لاحتصار الروابط و كما تعلم هذه 6 ارقام و حروف هناك احتمال انها تكرر
9 / مارس / 2012 الساعة 18:21
طب وليه مش تعمل تاكيد زى تاكيد اسم العضو اثناء التسجيل .. هل هو موجود من قبل ام لا
9 / مارس / 2012 الساعة 18:32
هو ممكن ان استعمل id لأنه لا يتكرر لكن أنا أريد استعمال رقم عشوائي صغير من 6 حروف و أرقام, هذا الرقم العشوائي يستعمل للدخول الى الرابط المختصر مثلا http://www.exemple.com/Hyg67I مثل موقع bit.ly
9 / مارس / 2012 الساعة 18:40