v2.5.2
Giriş yap

Random Sipariş Numarası Oluşturma

ufukozdemir
470 defa görüntülendi

Merhaba

Aşağıdaki gibi Random sipariş no oluşturuyorum.

    substr(rand(10000000,99999999), 0, 6);

Şöyle bir sorunum var oluşturduğu sipariş no databasede var ise tekrardan yeni random sipariş no oluşturtursun. Şayet bu oluşturduğu random sipariş no da var ise tekrardan bir sipariş no oluştursun.

Açıkcası döngünü hiç olmayan sipariş no bulana kadar dönmesini istiyorum.

Bunu hangi mantıkta yapabilirim.

Umarım anlatabilmişimdir derdimi :)

emirhan
642 gün önce

Belki bu yardımcı olur.
Önce database'deki kodlarının hepsini aldım.
Daha sonra bu kodların hepsini bir array içine koydum.
Sonrasında in_array ile üretilen kodun orada var olup olmadığına baktım.
intval($number) bölümünü boşver. O ben birden fazla kod üretirken aynı anda kaç tane üretilmek isteniyorsa o kadar for döngüsü çalışıyor.

`

$table = 'codes';

function generateCode($length = null){
    $result = "";
    $characters = "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
    $charactersLength = strlen($characters);

    for ($i = 0.0; $i < $length; $i++) {
      $result = $result . $characters[rand(0, strlen($characters)-1)];
    }

    return $result;
};

$codes = array();
$sqlIds = array();

$CurrentCodes = $wpdb->get_results(
    "SELECT code FROM codes"
);

$CurrentCodes = array_map(
    function($item){
        return $item->code;
    },
    $CurrentCodes
);

for ($i=0; $i < intval($number); $i++) { 
    
    $code = generateCode(10);

    if (in_array($code, $CurrentCodes)) {
        $i--;
        continue;
    }

    $data = array(
        'code' => $code,
        'time' => $time,
        'isUsed' => $isUsed,
        'campaignId' => $campaignId,
        'createdBranch' => $createdBranch,
        'usedTime' => null,
    );
    
    $wpdb->insert($table, $data);
    $my_id = $wpdb->insert_id;
    
    $codes[] = $code;

    $sqlIds[] = $my_id;
    
}

`

NOT: BU KOD KESİNLİKTE VERİMLİ DEĞİLDİR. ÇOK ÖNCEDEN YAZDIĞIM BİR KOD.

Daha verimli olması açısından veritabanına SQL sorgusu ile tabloda bu id var mıdır diye sormak daha iyi bir yaklaşım olacaktır.