2017-04-03 37 views
-1

我有這樣一個數組:(0,1,2,3,4,5,6,7,8,9 ,10)。我想保留前三個(0,1,2),然後移除下兩個(即3,4),然後保留三個(6,7,8),然後移除兩個(9,10),直到數組完全循環。PHP從數組中保留三個元素,然後丟棄兩個,然後保留三個,然後丟棄兩個等

我確定有一個簡單的解決方案,我只是沒有看到!

+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根據@avy解決方案是不是大型數組的最高性能的方法。我沒有使用任何額外的數組。

$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迭代的快速測試爲這個版本提供了〜360ms的時間,而在上面的時間爲〜840ms,所以它絕對值得多餘的線路,除非已知陣列很小。 – avy

+0

@avy謝謝你對上面的代碼的分析:) – Samarth

+0

其實,我把它拿回來(對不起!)。對於只有一次運行一次的100k條目數組的測試,此方法需要17.6秒,而我的版本運行時間爲6.9秒。這對於很多小陣列來說速度更快,而對於一個大陣列我的速度更快。 我會停止發佈基準沒有人要求現在:) – avy

相關問題