2010-06-11 2 views

ответ

9

быстрый метод будет это:

end($foo); 
$last = key($foo); 

метод Tesserex является излишне ресурсов голодны, когда вы не нужны все ключи.

+1

да, первый upvote пришел от меня. – Tesserex

+0

;-) Я даже искал какой-нибудь хороший способ сохранить внутренний указатель, чтобы вы могли вернуться назад, но не смогли найти хороший способ сделать это ... –

+0

@ Emil Хорошая мысль, я тоже просто посмотрел и Я не думаю, что есть способ сохранить состояние указателя (никакая функция не раскрывает 'zend_hash_get_pointer' и' zend_hash_set_pointer'). Было бы неплохо. – Artefacto

8
$keys = array_keys($foo); 
$last = end($keys); 

вам нужно передать фактическую переменную end, вы не можете поставить другую функцию внутри там.

1

Ниже неПростейшим, но будет может быть гораздо счастливее, чтобы иметь дело с большим (по количеству элементов, хотя, вероятно, быть лучше для большинства применений) массивов, чем другие ответы.

$last_key = key(array_slice($subject, -1, 1, true)); 

обоснованное предположение, не может быть верно для всех случаев

+0

Я склонен не согласиться. Я пробовал все три решения на массиве с 10000 целыми значениями, и мое решение было примерно в 20 раз быстрее, чем ваше. Результаты в секундах, измерение через microtime(): типичное время для вашего: 0,00013. Типичное время для моего: 0,0000069. Типичное время для Tesserex: 0,003. –

+0

На небольшом массиве (сотни целых значений): Ваш: 0,000015. Шахта: 0,000005. Tesserex: 0.00003 –

+0

Я не собираюсь начинать давать результаты тестов достаточно, чтобы сказать, я склонен не согласиться. В любом случае, ОП был после ** простейшего **, который, конечно же, не является. :-) – salathe

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