2009-12-02 4 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 редактирует массив на месте и возвращает удаленный элемент
+2

Вторая причина заключается в том, почему вы получаете предупреждение - поскольку у вас есть многомерный массив, первый раз через цикл «array_shift» возвращает вам первый элемент вашего многомерного массива, который a (мономерный) массив. Вызов 'array_shift' в одномерном массиве возвращает первое значение этого массива, поэтому' $ stats' не является массивом после второго раза через цикл. Я ожидаю, что вы получите сообщение об ошибке после того, как 'array_shift' был вызван дважды (т. Е. На третьей итерации цикла). –

+0

Я цитирую отличный комментарий от @neokio: возбужденный этим ответом, я быстро проверил 100 000 итераций, сравнивая (a) конец ($ arr); $ key = key ($ arr); reset ($ arr); против (b) $ key = key (array_slice ($ arr, -1,1, true)); ... в результате чего end() будет намного быстрее! end() = 0,05326 секунд, array_slice = 8.506 секунд ... да? - neokio Sep 26 '12 at 7:00 Значит, array_slice не очень эффективен. U может попробовать следующее: 'for ($ i = 0; $ i <6; $ i ++) { $ stats = array_shift ($ stats); } ' – ItsMeDom

Смежные вопросы