2016-07-06 8 views
0

異なるクラスの3つのオブジェクトを配列に挿入しようとしています。つまり、配列は[objA,.., objA, objB,.., objB, objC,..., objC]のようになります。 私の関数を設定する方法は、objA、objB、objCのそれぞれが配列に挿入され、各オブジェクトを挿入するために3つのforループがある回数だけrandを取得することです。配列に複数のオブジェクトを挿入する

$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

無料のクッキーを追跡する気にしないのであれば –

+0

私は無料のクッキーを取得しません.... – Rasclatt

+0

@Rasclattは、私は1つを販売することができますか? :) –

答えて

2

いずれかがOPが何であるかを知っている場合は、IDが

$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

関連する問題