簡體   English   中英

PHP唯一的10位數字str_shuffle

[英]PHP unique 10 digit numbers str_shuffle

假設我有一個100萬個10位數的唯一數字。 如果我為100萬個數字中的每個數字執行str_shuffle,那么是否仍將保持唯一性? 請建議


謝謝大家的澄清,但問題仍然存在。實際上,我所談論的百萬個數字都是唯一數字(實際上它們是移動數字10位數字)。我想將這百萬個數字提供給某些客戶,但我不願意因此,我需要將每個數字隨機化,並生成一個等效的10位唯一數字,該數字可以提供給客戶端並將映射保留在我的數據庫中。我正在尋找求和算法,該算法不會做很多事情處理腳本,否則,如果我遵循數組和內容的傳統路徑,我確定腳本會崩潰

沒有。

str_shuffle('1234567890')可能會給您“ 3124567890”。

str_shuffle('9876543210')也可能會給您“ 3124567890”,依此類推。

很明顯,答案是否定的。

對單個數字的任何修改,不關心所有其他數字,可能會導致重復。

隨機混洗是一種修改,因為它只是將數字混在一個數字中,因此很可能獲得重復(任何想計算概率的數學家?都希望對此發表評論。)

據我所知,默認情況下str_shuffle不是唯一的。 它只是隨機地隨機播放字符串。 從理論上講,一百萬個數字都可能是相同的。

反例:

<?php

$unique_numbers = array('101', '110');

foreach($unique_numbers as $number){
    echo str_shuffle($number) . PHP_EOL;
}

我有:

011
011

問題陳述表明,您實際上可能希望改組數組元素,而不是這些元素的內容。 也許您將能夠保持唯一性,但是通過將數組的元素交換一會兒即可擁有一個隨機分布的集-即,將N個迭代的隨機元素A與隨機元素B交換。

您正在尋找的是一個排列腳本,我恰好為您准備。

function permuteString($str) 
{ 
    $aStr = str_split($str); 
    $iSize = count($aStr); 
    $aResult = array(); 

    for ($i = 0; $i < $iSize; ++$i) 
    { 
        $sFirst = array_shift($aStr); 
        $aInner = $aStr; 
        $iInner = count($aInner); 
        for ($j = 0; $j < $iInner; ++$j) 
        { 
            $aResult[] = $sFirst . implode('', $aInner); 
            $sTmp = array_shift($aInner); 
            $aInner[] = $sTmp; 
        } 
        $aStr[] = $sFirst; 
    } 
    return $aResult; 
} 

$userinput="1234567890"; 
print_r(permuteString($userinput));

這將打印給定userinput變量的所有可能排列。

取決於您定義“唯一性”的方式。

當您說一百萬個10位數的數字集時,如果要對所有數字使用str_shuffle ,然后說“唯一”,則意味着這100萬個10位數的電話號碼中至少有一個以前不存在改組還是什么? 如果是這樣,請看這里:

10! 是3628800。比100萬大很多。 因此,所有數字都是隨機的,甚至三分之二。

這意味着,如果在所有數字上都使用str_shuffle ,則無論您將unique定義為什么,都極有可能(超過66%的機會)獲得“唯一”設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM