- Как получить последний элемент php массива
- array_key_last
- Parameters
- Return Values
- See Also
- User Contributed Notes 12 notes
- Как получить последний элемент массива в PHP
- Вариант 1
- Вариант 2
- Вариант 3
- Get the last element of an array in PHP
- Getting the last element with end()
- Getting the last element with array_slice()
- Getting the last element with array_pop()
Как получить последний элемент php массива
Смотря что подразумевается под словом «получить». Если нужно именно извлечь (получить элемент и уменьшить длину массива) последний элемент массива, то можно воспользоваться функцией array_pop() :
$numbers = [1, 2, 3, 4]; $lastNumber = array_pop($numbers); print_r($numbers); //=> [1, 2, 3] // Исходный массив уменьшился на один элемент
А если изменять исходный массив нельзя, то можно воспользоваться функцией array_key_last() . Эта функция получает ключ последнего элемента массива, а потом можно получить и сам последний элемент. Взгляните на пример:
$numbers = [1, 2, 3, 4]; $lastNumber = $numbers[array_key_last($numbers)]; print_r($numbers); //=> [1, 2, 3, 4] // Исходный массив при этом не изменился
Поиск последнего элемента PHP массива с помощью функции count() .
Подсчитывает количество элементов массива.
$numbers = ['one', 'two', 'three', 'four']; $count = count($numbers); // => 4 $lastKey = count($numbers) - 1; // => 3 $lastValue = $numbers[$lastKey]; echo($lastValue); // => four
array_key_last
Get the last key of the given array without affecting the internal array pointer.
Parameters
Return Values
Returns the last key of array if the array is not empty; null otherwise.
See Also
- array_key_first() — Gets the first key of an array
- end() — Set the internal pointer of an array to its last element
User Contributed Notes 12 notes
For those who loves tested candies;
function array_key_last (array $array ) // 100000 iters: ~0.068 secs
return key ( array_slice ( $array , — 1 ));
// 100000 iters: ~0.070 secs
return key ( array_reverse ( $array ));
// 100000 iters: ~0.088 secs
return array_keys ( $array )[ count ( $array ) — 1 ] ?? null ;
>
?>
if (! function_exists(«array_key_last»)) function array_key_last($array) if (!is_array($array) || empty($array)) return NULL;
>
Try to beat this polyfill in terms of performance!
if( ! function_exists ( ‘array_key_last’ ) ) function array_key_last (array $array ) if( !empty( $array ) ) return key ( array_slice ( $array , — 1 , 1 , true ));
>
>
// Bonus
if (! function_exists ( ‘array_key_first’ )) function array_key_first (array $arr ) foreach( $arr as $key => $unused ) return $key ;
>
>
?>
// PHP >= 7
function _array_key_last (array $array ) return (!empty( $array )) ? array_keys ( $array )[ count ( $array )- 1 ] : null ;
>
var_dump ( _array_key_last ([ ‘PHP’ , ‘Javascript’ , ‘Python’ ])); // 2
?>?php>
did return the first key of my array only:
«array_keys($array)[count($array) — 1] ?? null» works
I hope the example is fine for everyone else.
My array is:
[
new NameExpression(‘d’, 0),
new NameExpression(‘f’, 0),
new NameExpression(‘g’, 0),
]
// if : php ver < 7
// array_key_last
$arr = array(‘1’=>’bear1′,’2’=>array(’22’=>’bear22′),’3’=>’bear3’);
echo end(array_keys($arr));
echo (array_key_last($a)); // output: «0», not «1»
Will work for any type of array
if ( ! function_exists ( ‘array_key_last’ ) ) /**
* Polyfill for array_key_last() function added in PHP 7.3.
*
* Get the last key of the given array without affecting
* the internal array pointer.
*
* @param array $array An array
*
* @return mixed The last key of array if the array is not empty; NULL otherwise.
*/
function array_key_last ( $array ) $key = NULL ;
end ( $array );
$key = key ( $array );
>
Now that we have this function, where we once used.
$idxLast = count ( $arr ) — 1 ;
?>
we can now optimize code speed by using.
$idxLast = ( array_key_last ( $arr ) ?? 0 );
?>
Use-cases include lots of looping and control-structures.
If you do not know ahead of time that the array is numerically indexed, and that it could possibly be associative. safer/faster to stick with count().
This polyfill works for PHP 5.6+.
It is a slight modification of «wes at nospam dot example dot org»‘s example:
if( ! function_exists ( ‘array_key_first’ ) )
function array_key_first (array $array )
if( ! function_exists ( ‘array_key_last’ ) )
function array_key_last (array $array )
// the last 2 args to array_slice are crucial
return array_key_first ( array_slice ( $array , — 1 , null , true ));
>
>
Here come my benchmark, and
return key(array_slice($array, -1));
is the my best answer for a polyfill.
function array_key_last_1 (array $array ) // assert(!empty($array));
return key ( array_slice ( $array , — 1 ));
>
function array_key_last_2 (array $array ) return key ( array_slice ( $array , — 1 , 1 , true ));
>
function array_key_last_3 (array $array ) return key ( array_reverse ( $array ));
>
function array_key_last_4 (array $array ) return array_keys ( $array )[ count ( $array ) — 1 ] ?? null ;
>
function array_key_last_5 (array $array ) return array_keys ( $array )[ count ( $array ) — 1 ] ?? null ;
>
function array_key_last_6 (array $array ) $copy = array_keys ( $array );
return end ( $copy );
>
$result = array();
$array = range ( 0 , 1000000 );
for( $i = 1 ; $i < 7 ; $i ++) $callback = 'array_key_last_' . $i ;
$before = microtime ( true );
call_user_func_array ( $callback , array( $array ));
$after = microtime ( true );
$time = ( $after — $before );
$result [ $callback ] = $time ;
>
asort ( $result );
foreach ( $result as $key => $value ) echo ‘[‘ . $key . ‘]’ . $value . » sec» . PHP_EOL ;
>
Correct polyfill (one that doesn’t make copies of arrays, and that doesn’t make use of the IAP) is:
if(! function_exists ( ‘array_key_first’ )) function array_key_first (array $array ) if( $array === []) return NULL ;
>
foreach( $array as $key => $_ ) return $key ;
>
>
if(! function_exists ( ‘array_key_last’ )) function array_key_last (array $array ) if( $array === []) return NULL ;
>
return array_key_first ( array_slice ( $array , — 1 ));
>
>
- Array Functions
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_is_list
- array_key_exists
- array_key_first
- array_key_last
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
- each
Как получить последний элемент массива в PHP
Имеется много способов извлечь последний элемент массива в PHP скрипте. Они различаются своим воздействием на массив (могут удалять извлечённый элемент, либо сдвигать указатель), а также своей производительностью.
Вариант 1
Начиная с PHP 7.3 наконец-то добавлена специальная функция, которая получает последний ключ массива, это функция array_key_last.
Обратите внимание, что извлекается не последний элемент массива, а именно последний ключ, поэтому для получения самого последнего члена массива эту функцию нужно использовать следующим образом:
$x = $array[array_key_last($array)];
Бенчмарки производительности показывают, что это самый быстрый вариант, поэтому рекомендуется использовать именно его.
Поскольку PHP 7.3 на момент написания является совсем недавним стабильным релизом, то эта версия доступна ещё не на всех серверах. Для достижения совместимости, рекомендуется использовать следующий код:
if (! function_exists("array_key_last")) < function array_key_last($array) < if (!is_array($array) || empty($array)) < return NULL; >return array_keys($array)[count($array)-1]; > >
Этот код проверяет, доступна ли функция array_key_last. Если эта функция недоступна, то создаётся пользовательская функция с таким же именем, которая выполняет это же самое действие. Результатом этого будет то, что на PHP версии 7.3 и более поздних будет использоваться оригинальная функция array_key_last, а на более старых версиях будет задействована пользовательская функция array_key_last.
Рассмотрим ещё варианты, которые подойдут для более старых версий PHP.
Некоторые из рассмотренных вариантов могут показаться излишне усложнёнными, но это сделано для того, чтобы убрать воздействие на массив. К примеру, нужное действие (получение последнего элемента массива) может выполнять функция array_pop, но она не используется сама по себе (хотя применяется в некоторых рассмотренных конструкциях), поскольку в результате её действия удаляется извлекаемый элемент.
Вариант 2
$x = array_values(array_slice($array, -1))[0];
Вариант 3
Get the last element of an array in PHP
For getting the last element of an array in PHP you have multiple options, which function slightly differently. The most obvious ones are end() , array_slice() and array_pop() .
Getting the last element with end()
The end() function sets the internal pointer of the array to its last element and returns it’s value. It works pretty straight forward, after this function call the array is still intact and you can do with the return value what you’d like; assign it to a variable, print it, e.g.
Getting the last element with array_slice()
With the array_slice() function you extract slices from an existing array. You can use -1 as offset to get just the last item of the array you pass as the first argument. A side note
Be aware that array_slice() returns a new array. So in order to actually get the last element of the original array you need to get the value at index 0 of the return value from array_slice() .
<?php $dogs = ['Lassie', 'Hachi', 'Bolt']; echo array_slice($dogs, -1)[0]; # => 'Bolt'
Getting the last element with array_pop()
This one functions slightly differently. The array_pop() function removes the last element from an array and returns it. So it works perfectly fine to get the last element of the array, just make sure you also actually meant to remove it from the array.
<?php $dogs = ['Lassie', 'Hachi', 'Bolt']; echo array_pop($dogs); # => 'Bolt' print_r($dogs); # => Array # ( # [0] => Lassie # [1] => Hachi # )