$array?=?[1,2,3,4,5,6,7,8,9,5,4,4,4,3,2];
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),團(tuán)風(fēng)網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:團(tuán)風(fēng)等地區(qū)。團(tuán)風(fēng)做網(wǎng)站價格咨詢:13518219792
$exist?=?[];
$repeat?=?[];
foreach($array?as?$v){
if(in_array($v,$exist)){
array_push($repeat,$v);?//不存在的放入exist中
}else{
array_push($exist,$v);?//已存在的放入repeat中
}
}
var_dump($repeat);?//repeat即為重復(fù)的數(shù)據(jù)
$unique_repeat?=??array_unique($repeat);?//如果多次重復(fù)的值只取一次,可以去重一下
var_dump($unique_repeat);
?php
$check = $list = array();
$end = 41;
for ($i = 1; $i $end; $i++)
{
for ($j = $i + 1; $j $end; $j++)
{
if ( ! empty($check[$i][$j]) OR ! empty($check[$j][$i])) continue;
for ($k = $j + 1; $k $end; $k++)
{
if ( ! empty($check[$i][$k]) OR ! empty($check[$k][$i]) OR ! empty($check[$j][$k]) OR ! empty($check[$k][$j])) continue;
$check[$i][$j] = $check[$i][$k] = $check[$j][$i] = $check[$j][$k] = $check[$k][$i] = $check[$k][$j] = 1;
$list[] = $i.'_'.$j.'_'.$k;
break;
}
}
}
print_r($list);
說下思路:
1. 將生成的數(shù)字保存到mysql數(shù)據(jù)庫,然后每次生成的號碼不能與數(shù)據(jù)庫的數(shù)字重復(fù),請問怎么弄?
先讀取數(shù)據(jù)庫已存在的數(shù)字,將結(jié)果以數(shù)組格式,與rand(1,1000)的數(shù)組相比較計(jì)算差集,去除這部分?jǐn)?shù)字(array_diff),再shuffle,得到新的隨機(jī)數(shù)。
我覺得,你完全可以建立一個序號表,比如,1-1000,每次用時先用隨機(jī)函數(shù)?。?-數(shù)據(jù)記錄數(shù))個數(shù)值,再用這個數(shù)值取得相應(yīng)的記錄,當(dāng)取出之后,刪除這個記錄,這樣保證記錄總數(shù)一直會減少且數(shù)字也不會重復(fù)。
2. 有沒有什么辦法生成的時候先生成一位數(shù)的,一位數(shù)生成滿了以后再生出兩位數(shù)的,兩位數(shù)滿了然后再三位數(shù)的,以此類推?
先獲取一位數(shù)的記錄,再從中隨機(jī)抽取一個,如果數(shù)據(jù)庫中沒有找到一位數(shù)的,就遞增一位數(shù),直到找到為止。
3. 代碼的執(zhí)行效率希望能越高越好!
如果想要代碼執(zhí)行效率,最好盡量減少與數(shù)據(jù)庫的交互。
php生成6位不重復(fù)的字符串,用到的工具:notepad++,步驟如下:
php代碼部分:
?php
echo?"刷新輸出不同的六個字符組合:".substr(md5(microtime(true)),?0,?6);
?
說明:此函數(shù)先獲取當(dāng)前時間,然后通過md5進(jìn)行加密,然后再通過substr截取六位數(shù),當(dāng)前時間是不會重復(fù)的,從而保證生成的六個字符串永遠(yuǎn)不會重復(fù)。
效果圖:
注意事項(xiàng):此代碼必須在php環(huán)境下運(yùn)行。