2017-04-03 7 views
-1

私は次のような配列を持っています。(0,1,2,3,4,5,6,7,8,9 、10)。最初の3つ(0,1,2)を残し、次に2つ(3つ、4つ)を削除してから、3つ(6,7,8)を保ち、次に2つ(9,10)完全にループしています。PHPは配列から3つの要素を保持し、2つを破棄してから3つ続け、2つを破棄します。

私が見ていない簡単な解決策があると確信しています!そのため

+1

可能な複製(http://stackoverflow.com/questions/369602/delete-an-element-from-an-array) –

答えて

0

かなりの数のオプション、クリーンなコードは次のようになります。

$array = [0,1,2,3,4,5,6,7,8,9,10]; 
$new_array = []; 

for ($i = 0; $i < count($array); $i += 5) { 
    $new_array = array_merge($new_array, array_slice($array, $i, 3)); 
} 

print_r($new_array); 

しかしarray_mergeへの呼び出しの多くはおそらく大規模な配列のための最もパフォーマンスの高い方法ではありません。

+0

ありがとう!完全に動作します – BusinessGuy

0

ちょっと私は大型アレイのための最も実用的な方法ではありませんarray_mergeを使用していない別の解決策を持っています。私は余分な配列を使用していません。

$arr = array(0,1,2,3,4,5,6,7,8,9,10); 
$len = sizeOf($arr); 
$count = 0; 
$i=0; 
while($i<$len){ 
    $count++; 
    if($count==3){ 
      array_splice($arr,$i+1,2); 
      $count = 0; 
      $len = sizeOf($arr); 
    } 
    $i++; 
} 
print_r($arr); 
[配列から要素を削除]の
+0

私のマシンでの100k回の反復の簡単なテストは、上記バージョンに対して〜360mmsを提供します。これは、上記の840msと同じです。したがって、アレイが小さいと分かっていない限り、余分なラインの価値があります。 – avy

+0

@avy上記のコードを分析していただきありがとうございます:) – Samarth

+0

実際、私はそれを取り戻します(申し訳ありません)。 1回だけ実行される100kエントリの配列を使ったテストの場合、このメソッドは17.6秒かかり、6.9秒で実行されます。これは、多数の小さな配列では高速ですが、1つの大きな配列ではより高速です。 誰も今質問していないベンチマークの掲載をやめます:) – avy

関連する問題