PHP - элегантный (быстрый) способ доступа к элементам, считая с конца массива? - PullRequest
1 голос
/ 02 августа 2011

У меня есть массив, в котором я хочу получить элемент «отрицательная тройка» независимо от длины массива.(Если это не имеет смысла, выкиньте комментарий, и я уточню).

Очевидный способ сделать это - $arr[count($arr)-4], но это кажется неуклюжим.

Есть ли быстрыйэлегантный способ сделать это?

ОБНОВЛЕНИЕ

Все еще возитесь, есть какие-нибудь мысли по этому поводу?

array_slice($arr,-4,-3); 

Ответы [ 5 ]

4 голосов
/ 02 августа 2011

Очевидным способом возвращается единственное значение, которое вы хотите в постоянном времени, при условии, что у вас есть числовые индексы. Размер массива уже известен PHP, он просто переходит на желаемое смещение и дает вам результат.

array_slice выполняет во много раз больше работы, сравнивая размер массива с вашим смещением, вычисляя условия цикла, создавая новый массив для хранения среза, зацикливая часть существующего массива, копируя значения в новый массив, а затем возвращает этот массив вам.

http://lxr.php.net/opengrok/xref/PHP_TRUNK/ext/standard/array.c

4 голосов
/ 02 августа 2011

Да, есть:

Попробуйте что-то вроде этого:

$newArray = array_slice($array, -3);
1 голос
/ 02 августа 2011

Попробуйте функцию array_slice () , указав отрицательное смещение в качестве второго параметра.

1 голос
/ 02 августа 2011

array_slice() * * 1004

array_slice($a, -3)
1 голос
/ 02 августа 2011

вы можете использовать $last = end($arr);, затем дважды использовать prev($arr);, чтобы получить 2 других элемента.

Да, и проверьте, возвращают ли они ЛОЖЬ, если у вас нет как минимум 3 элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...