2009-12-02 167 views
0

我需要从一个多维数组拿到最后6个值最后6个值,我试图做这样的事情获取从多维数组

for($i=0;$i<6;$i++){ 
    $stats = array_shift($stats); 
} 

但随后第一array_shift后,我得到的以下错误

PHP Warning: array_shift(): The argument should be an array 

是否有任何函数可以在PHP中执行此操作?

回答

9

您可以使用array_slice()

$stats = array_slice($stats, -6); 

你的代码是不工作的原因是因为

  1. array_shift()从阵列前端删除 - 所以你最终与第一6去除,这是不一样的越来越近6除非你的阵列有12个项目...
  2. array_shift编辑阵列中的位置,并返回它去掉
  3. 项目
+2

的这些原因,第二个是为什么你的警告 - 因为你已经有了一个多维数组,在第一时间通过循环'array_shift'返回您在多维数组的第一个元素,这是一个(单维)数组。在单维数组上调用'array_shift'会返回该数组的第一个值,所以'$ stats'在第二次循环后不是数组。我希望你在array_shift被调用两次之后(即在循环的第三次迭代中)会得到一个错误。 – 2009-12-02 11:32:33

+0

我引述来自@neokio一个伟大的评论: 通过这个答案激动,我做了10万次迭代快速测试,比较(一)结束($ ARR); $键=键($ ARR);重置($ ARR ); (b)$ key = key(array_slice($ arr,-1,1,true)); ...导致end()更快! end()= 0.05326秒,array_slice = 8.506秒......呵呵?? - - neokio 12年12月26日在7:00 这意味着array_slice不是很perfomant。 ü可能尝试这一个: '为($ I = 0; $ I <6; $ I ++){$ 统计= array_shift($统计); }' – ItsMeDom 2014-06-27 05:17:03