2016-07-06 116 views
0

我試圖將3個不同類的對象插入到數組中,例如數組看起來像這樣[objA,.., objA, objB,.., objB, objC,..., objC]。 我有我的功能設置的方式是獲取每個objA,objB和objC插入到數組中的次數的rand,然後有3個for循環插入每個對象。將多個對象插入到數組中

$no_of_objA = rand(5, 10); 
    $no_of_objB = rand(1, 5); 
    $no_of_objC = rand(3, 8); 

    for($i = 0; $i < $no_of_objA; $i++) 
     $this->users[$i] = new A(); 

    for($i = $no_of_objA; $i < ($no_of_objA + $no_of_objB); $i++) 
     $this->users[$i] = new B(); 

    for($i = ($no_of_objA + $no_of_objB); $i < ($no_of_objA + $no_of_objB + $no_of_objC); $i++) 
     $this->users[$i] = new C(); 

最糟糕的情況是,這顯然是從rand函數生成的最大數目的Big-O。 這工作得很好,但是,我有種想法可能會有一個更優雅和優化的解決方案來實現這一點。

我不是真的對象被插入的順序有關...

+2

如果任何人知道OP就是免費餅乾做 – 2016-07-06 03:21:11

+0

我不會得到一個免費的cookie .... – Rasclatt

+0

@Rasclatt我可以賣ya嗎? :) – 2016-07-06 03:23:27

回答

2

如果你不關心與標識跟蹤

$a_count = mt_rand(5, 10); //Faster than rand 
$b_count = mt_rand(1, 5); 
$c_count = mt_rand(3, 8); 

for($i = 0;$i < $a_count; $i++){ 
    $this->users[] = new A(); 
} 
for($i = 0;$i < $b_count; $i++){ 
    $this->users[] = new B(); 
} 
for($i = 0;$i < $c_count; $i++){ 
    $this->users[] = new C(); 
} 
+1

這實際上產生的結果與問題中的代碼完全相同,因爲PHP將自動索引從0開始的數組。它更加優雅,因爲循環更簡單,但它會產生相同的結果。它不是更快,我不認爲有更快的解決方案存在。創建和插入'n'對象顯然是'O(n)'。 – mkasberg