Random Sipariş Numarası Oluşturma
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 :)
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.