لديك حساب بالفعل؟ دخول
دخول  سجل الأن 
التكرار حتى الحصول على رقم غير مكرر
السلام عليكم
بهذه المناسبة أحب أن أشارك معكم الدالة التالية, دالة جميلة تقوم بصنع رقم عشوائي كلمات و حروف بالطول و يمكن إضافة حروف أخرى أيضاً, الدالة هي:

  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 );
  }


بالنسبة لسؤالي: في حالة مثلا تم توليد رقم عشوائي أريد أن تقوم الدالة بتوليد رقم آخر لغاية ما تصل الى رقم عشوائي غير موجود بقاعدة البيانات و لكن المشكل هو أنه في حالة أن كل الأرقام التي يتم توليدها موجودة بقاعدة البيانات, فالدالة ستبقى تدور لوحدها, أريد طريقة أو شرط في أنه إذا الدالة لم تجد الرقم في وقت معينة تخرج ذاتياً أو تظهر رسالة العودة لاحقاً و شكراً
تاريخ البداية: 9 / مارس / 2012 الساعة 18:8 اخر نشاط: 10 / مارس / 2012 الساعة 4:47 دالة عشوائي php

هههههههه لا زالت تبحث عن صدفة تحدث كل مئة الف سنة .. ولكنى ساحاول
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

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
منذ: 10 / مارس / 2012 الساعة 4:47

الامر ساهل ايضا .. عليك استعمال طريقة static شوف
<?php
function test()
{
    static $a = 0;
    echo $a;
    $a++;
}
?>
هذه تضع المتغير a اول مرة تستدعى فيها الدالة ب 0 وبعد ذلك تزيد 1 فمن الممكن استعمالها للتحديد

بواسطة: molhm
منذ: 9 / مارس / 2012 الساعة 19:13

لم أفهم ما تقصد يا ريث لو توضح مشكوراً
9 / مارس / 2012 الساعة 19:36

تستخدم هذه الخاصية لمعرفة عدد تكرار الدالة على ما اعتقد
9 / مارس / 2012 الساعة 21:35

الموضوع شبه مستحيل
ولكن يبقى ممكن
الحل من وجهة نظري تضيف رقم آخر اذا كانت كافة الارقام التي تم توليدها موجودة (^^)


function GenID(){
    $key = random_string();
$i=0;
    while($key=$databasestring){
        $key.=$i;
$i+=1;
    }
}

بواسطة: Amer
منذ: 9 / مارس / 2012 الساعة 19:10

نعم هذه فكرة, أو توليد رقم إضافي جديد
9 / مارس / 2012 الساعة 19:18

اعتقد انى فهمتك .. عليك استخدام خاصية الدالة المكررة .. اى دالة داخل نفسها شىء كهذا
function GenID(){
	$key = random_string();
    if(هنا التاكد ان كان موجود فى القاعدة ام لا){
        return GenID()
    }
} 
وتستعمل هذه الدالة بدلا من الدالة الام

بواسطة: molhm
منذ: 9 / مارس / 2012 الساعة 18:38

أعرف, هذا ليس هو الاستفسار! الاستفسار هو أنه في حالة جميع الأكواد التي سيتم توليدها هي موجودة أصلا في قاعدة البيانات, في هذه الحالة الدالة ستبقى تدور في المالانهاية, أريد أن أضيف شرط و أفكر في شرط مثلاً إذا الدالة قامت بالدوران 50 مرة و لم تجد شيء تتوقف و تعود الى الرئيسية
9 / مارس / 2012 الساعة 18:59

أنشر اجابتك

xهل تريد الاجابة عن هذا السؤال؟ من فضلك سجل دخول او اشترك لتتمكن من الاجابة