2011-11-20 45 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

这是你所有人都在寻找的。 –