获取php数组的最后5个元素

时间:2012-03-14 15:34:22

标签: php mysql arrays

如何获取PHP数组的最后5个元素?

我的数组是由MySQL查询结果动态生成的。长度不固定。如果长度小于或等于5,那么得到所有,否则为最后5。

我尝试了PHP函数last()array_pop(),但它们只返回最后一个元素。

5 个答案:

答案 0 :(得分:26)

您需要array_slice,这正是如此。

$items = array_slice($items, -5);

-5表示“在数组结束前从五个元素开始”。

答案 1 :(得分:5)

array_pop()循环5次?如果返回的值是null,那么您已经耗尽了数组。

$lastFive = array();

for($i=0;$i < 5;$i++)
{
    $obj = array_pop($yourArray);

    if ($obj == null) break;
    $lastFive[] = $obj;
}

在看到其他答案后,我不得不承认array_slice()看起来更短,更具可读性。

答案 2 :(得分:4)

array_slice ($array, -5)应该做的伎俩

答案 3 :(得分:0)

使用array_slicecount()

很简单
$arraylength=count($array);

    if($arraylength >5)
         $output_array= array_slice($array,($arraylength-5),$arraylength);
    else
        $output_array=$array;

答案 4 :(得分:0)

我只是想稍微扩展一下这个问题。如果你循环一个大文件并希望保留当前位置的最后5行或5个元素,该怎么办?并且您不希望将大型数组保留在内存中并且遇到array_slice的性能问题。

这是一个实现ArrayAccess接口的类。

它获得数组和所需的缓冲区限制。

您可以使用类对象,就像它是一个数组一样,但它会自动保留最后5个元素

<?php
class MyBuffer implements ArrayAccess {
    private $container;
    private $limit;

    function __construct($myArray = array(), $limit = 5){
        $this->container = $myArray;
        $this->limit = $limit;
    }
    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
        $this->adjust();
    }

    public function offsetExists($offset) {
        return isset($this->container[$offset]);
    }

    public function offsetUnset($offset) {
        unset($this->container[$offset]);
    }

    public function offsetGet($offset) {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
    public function __get($offset){
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
    private function adjust(){
        if(count($this->container) == $this->limit+1){
            $this->container = array_slice($this->container, 1,$this->limit);
        }
    }
}


$buf = new MyBuffer();
$buf[]=1;
$buf[]=2;
$buf[]=3;
$buf[]=4;
$buf[]=5;
$buf[]=6;

echo print_r($buf, true);

$buf[]=7;
echo print_r($buf, true);


echo "\n";
echo $buf[4];