2011-11-20 64 views
1

從陣列中刪除最老的元素

array(a, b, c, d, e);

我想新的元素添加到它,但保持最大元素數到5,所以,如果後添加數超過5時,我想從開始刪除元素,直到數組的大小再次爲5。

回答

2

添加的數組元素,並檢查以下條件

 
if(count($arr) >= 5) { 
    array_shift($arr); //remove element from beginning 
} 
+0

有7個元素的數組呢? – hakre

1

使用環形緩衝器,覆蓋舊元素和記憶「第一」一個的索引。

add_element (k) 
    a [first] = k; 
    first = (first + 1) % 5 

access_element (i) 
    return a [(first + i) % 5] 
+1

這段代碼是用php嗎? :) –

+0

@AurelioDeRosa,不,這是僞代碼:) – chill

+0

我知道......不過這也不是什麼OP問,因爲這個問題被問PHP不是一般的算法。 –

1

您可以使用此代碼:

$array = array('a', 'b', 'c', 'd', 'e'); 
$newElems = array ('f', 'g', 'h'); 

foreach($newElems as $elem) 
{ 
    array_shift($array); 
    array_push($elem); 
} 

它的工作原理,你可以在這裏看到:http://codepad.org/DH2UUuTY

1

http://php.net/manual/en/language.types.array.php

的未設置()函數允許刪除鍵來自一個數組。請注意, 該數組不會被重新編制索引。如果需要真正的「移除和移位」行爲 ,則可以使用array_values() 函數對數組進行重新索引。

下面是一個例子。

2
function add($array,$item) { 
    array_push($item); 
    while(count($array)>5) array_shift($array); 
} 
3

array_slice將幫助您

$array = array('a','b','c','d','e'); 
    $array[] = 'f'; 

    if(count($array) > 5) 
     $array = array_slice($array,count($array)-5); 

    var_dump($array); 

可重複使用的功能

function add_array_max(&$array,$item,$max) 
    { 
     $array[] = $item; 
     if(count($array) > $max) 
      $array = array_slice($array,count($array)-$max); 
    } 

    add_array_max($array,'g',5); 
    add_array_max($array,'h',5); 
    add_array_max($array,'i',5); 
    add_array_max($array,'j',5); 

    var_dump($array); 
+0

我想你的意思是,如果(計數($陣列)> $最大) –

+0

哦,感謝名單奧雷利奧,我編輯的答案。 –

+0

愉快的幫助;) –

1

試試這個:

if(count($array) >= 5)) { array_pop($array); } 
array_push($array, 'whatever'); 
3

對於我的建議,我利用了array_sliceDocs

輸入:

$arr = range('a', 'c'); 
$new = 'f'; 
$highest = 4; 

代碼:

$arr = array_slice($arr, -$highest); 
$arr[] = $new; 

array_slice照顧限制陣列的最後4個元素,那麼添加新元素。

如果數組少於4個元素,這不會刪除任何元素,因此只添加新元素。

Demo

+0

這是你所有人都在尋找的。 –