Re: [請益] 討論區中的id問題

看板PHP作者 (HKC === KFC //false)時間17年前 (2008/08/16 14:11), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《rexkimta (冷杉林)》之銘言: : 最近正在練習性的寫一個討論區, : 我的作法是每篇文章給一個id, : 一開始id是用自動編號(auto_increment), : 可是後來想想如果有文章被刪掉了, : 它的id就會一直空在那邊,感覺很奇怪, : 我就想到了youtube為每個影片編號的方法, : (像這樣:atch?v=57MbUI_uvps) : 請問有沒有推薦的函式庫? : ps:我有看過hash,可是它產生的字串都長的不像話= = 剛剛寫好的破爛程式就送給你吧 ! <?php function make_id($length) { if (!isset($length)) { return; } //避免輸入字串等等變數型態直接進入函式 if ((int) $length == 0) { return; } //可以自己加入ID可支援的文字 $type = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-', '_'); $id = ''; while(1) { //創出長度為$length值的ID for ($i = 0; $i < $length; $i++) { $rnd_key = rand(0, count($type) - 1); $id .= $type[$rnd_key]; } //避免ID重複 //重複機率是 count($type) 的 $length 次方分之一 //亦即你資料庫可以分配的ID有 count($type) 的 $length 次方個 //之後就陷入無窮迴圈,老實說這程式寫得很差@@" if (!id_existed($id)) //函式自己寫ˊˇˋ { break; } } return $id; } //用法就這樣吧 ! YouTube ID 好像長度都是 11 $youtube_like_id = make_id(11); ?> P.S. id_existed() 函式一定要自己寫哦 ! 不然會出錯或者陷入無窮迴圈(?) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.228.89.76

08/16 14:49, , 1F
YouTube長度11的字串組合一定夠你用,一共有10^19個
08/16 14:49, 1F

08/16 17:44, , 2F
多謝你啦。
08/16 17:44, 2F
文章代碼(AID): #18fc-X9F (PHP)
討論串 (同標題文章)
文章代碼(AID): #18fc-X9F (PHP)