2016-07-02 28 views
0

欲連接兩個相似range(Unicode的數目轉換的目的),爲了使這樣的數組:定製陣列重複功能

$nums = [ 
    0=> 0, 
    1=> 1, 
    2=> 2, 
    3=> 3, 
    4=> 4, 
    5=> 5, 
    6=> 6, 
    7=> 7, 
    8=> 8, 
    9=> 9, 
    10=> 0, 
    11=> 1, 
    12=> 2, 
    13=> 3, 
    14=> 4, 
    15=> 5, 
    16=> 6, 
    17=> 7, 
    18=> 8, 
    19=> 9 
    ]; 

我可以做到這一點簡單地級聯這樣的代碼:

$nums=array_merge(range(0,9),range(0,9)); 

但我正在尋找更高效或專門的PHP函數來完成這項工作。 我會appriciate任何一種方法或提到專用功能的存在。

+0

更高效的是** C ** – revo

+2

您可以在函數中使用它,例如:[https://eval.in/599535](https://eval.in/599535)。這樣您就可以輕鬆選擇開始,結束和數量。 – FirstOne

+0

我不知道你的目標是什麼,但它聽起來像你需要Modulo運算符,而不是任何函數。 – Erik

回答

1

更新(因爲版本是不可靠的重複性比OP原代碼更快。)

是否必須是一個數組合並嗎?基於你對我上面評論的回答,我可以假設2個範圍總是相同的。 IE瀏覽器。它只是一個重複的範圍/順序。

你還提到,它是用於轉換,所以我猜它是一個查找表。

$input = 11; 
$nums = array_merge(range(0,9),range(0,9)) 
echo $nums[$input]; 

// This will output 1 

假設這是目的,給它例如。 11作爲輸入,並得到1的結果,你可以通過這樣做而不用數組獲得更多的速度。

假定範圍爲0,圖9和11再一次作爲輸入:

$input = 11; 

$rmin = 0; 
$rmax = 9; 

$rmax = $rmax + 1 - $rmin; 
$output = ($input % $rmax) + $rmin; 

echo $output; 

// This will output 1 

的$輸入=> $輸出值將匹配的數組版本excactly.You也可以RMIN和RMAX以匹配任何範圍你要。

速度明智它有點難以比較,因爲它的2種不同的方法,但

nums = array_merge(range(0,9),range(0,9)); 

100.000次在這裏0.272秒和100.000輪上面我的代碼(不包括「回波」)給出0.021秒。

+0

+1:for你的時間和算法。我檢查你的代碼和$ nums = array_merge(範圍(0,9),範圍(0,9));''有'100,000'迭代。我的代碼需要0.20秒,你的需要0.25秒(作爲你的意識),並簡單地分配20個元素數組,其中只需要一半的時間(0.089秒) –

+0

除了我最後的評論,我認爲我們不應該計算主時間算法,特別是'print'函數更費時間,並且可能會產生很大的容差。如果在'print'函數之前創建第二個'microtime()',你會得到更加顯着的結果 –

+0

我剛剛使用$ total = microtime(1) ; print「new:」。$ total。「\ n」;代替。完全沒有區別。 – thelogix