Как я могу получить последний ключ массива?
Как получить последний ключ в массиве?
Ответ 1
Решением было бы использовать комбинацию end
и key
(цитирование):
-
end()
перемещает внутренний указатель массива на последний элемент и возвращает его значение. -
key()
возвращает элемент индекса текущей позиции массива.
Итак, часть кода, подобная этой, должна сделать свое дело:
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
end($array); // move the internal pointer to the end of the array
$key = key($array); // fetches the key of the element pointed to by the internal pointer
var_dump($key);
Будет выводить:
string 'last' (length=4)
т.е. ключ последнего элемента моего массива.
После того, как это будет сделано, внутренний указатель массива будет в конце массива. Как указано в комментариях, вы можете запустить метод reset()
для массива, чтобы вернуть указатель на начало массива.
Ответ 2
Хотя end()
кажется самым простым, но не самым быстрым. Более быстрой и гораздо более сильной альтернативой является array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
Как говорят тесты, для массива с 500000 элементов это почти в 7 раз быстрее!
Ответ 3
Я предпочитаю
end(array_keys($myarr))
Ответ 4
Начиная с PHP 7.3 (2018) есть (наконец) функция для этого: http://php.net/manual/en/function.array-key-last.php
$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )
будет выводить
orange
Ответ 5
Просто используйте: echo $array[count($array) - 1];
Ответ 6
Не знаю, будет ли это быстрее или нет, но проще это сделать, и вы избегаете ошибки, не передавая функцию end()...
ему просто нужна была переменная... не нужно писать еще одну строку кода, а затем отменить ее, если вам нужно.
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
Ответ 7
Попробуйте использовать array_pop и array_keys следующим образом:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
Ответ 8
Начиная с PHP7.3, вы можете напрямую обращаться к последнему ключу в (внешнем уровне) массива с помощью array_key_last()
Это означает, что вы можете получить значение окончательного ключа без:
- перемещение указателя массива (который требует двух строк кода) или
- сортировка, реверсирование, выталкивание, подсчет, индексирование массива ключей или любое другое дурачество
Эта функция давно назрела и стала долгожданным дополнением к инструментальному поясу с функцией массива, который повышает производительность, позволяет избежать нежелательных побочных эффектов и обеспечивает чистый/прямой/интуитивно понятный код.
Вот демо:
$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
echo "please upgrade to php7.3";
} else {
echo "First Key: " , key($array) , "\n";
echo "Last Key: " , array_key_last($array) , "\n";
next($array); // move array pointer to second element
echo "Second Key: " , key($array) , "\n";
echo "Still Last Key: " , array_key_last($array);
}
Выход:
First Key: a
Last Key: c // <-- unaffected by the pointer position, NICE!
Second Key: b
Last Key: c // <-- unaffected by the pointer position, NICE!
Некоторые заметки:
-
array_key_last()
- это братская функция array_key_first(). - Обе эти функции являются "невежественными указателями".
- Обе функции возвращают
null
если массив пуст. - Отбракованные одноуровневые функции (
array_value_first()
иarray_value_last()
) также предлагали бы доступ к элементамarray_value_last()
указателями, но они, очевидно, не смогли набрать достаточное количество голосов, чтобы воплотиться в жизнь.
Вот несколько соответствующих страниц, обсуждающих новые функции:
Ответ 9
Я также хотел бы предложить альтернативное решение этой проблемы.
Предполагая, что все ваши ключи являются числовыми без каких-либо пробелов, мой предпочтительный метод состоит в том, чтобы подсчитать массив, а затем минус 1 из этого значения (чтобы учесть тот факт, что ключи массива начинаются с 0.
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
Это даст вам:
Int (1) кот
Ответ 10
Вы можете использовать это:
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array);
echo key($array);
Другое решение - создать функцию и использовать ее:
function endKey($array){
end($array);
return key($array);
}
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);
Ответ 11
Я просто взял вспомогательную функцию от Xander и улучшил ее с ответами до:
function last($array){
$keys = array_keys($array);
return end($keys);
}
$arr = array("one" => "apple", "two" => "orange", "three" => "pear");
echo last($arr);
echo $arr(last($arr));
Ответ 12
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
Ответ 13
Попробуйте это с array_reverse()
.
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);
Ответ 14
В PHP> = 7, есть array_key_last(), чтобы получить последний ключ массива
<?php
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$lastKey = array_key_last($array);
var_dump($lastKey);
?>
Выход
'c'
Ответ 15
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
Это работает, потому что PHP перемещает его указатель на массив внутри $array
Ответ 16
Лучшее возможное решение, которое также может быть использовано, используется inline:
end($arr) && false ?: key($arr)
Это решение является только выражением/выражением и обеспечивает хорошее, а не наилучшее из возможных результатов.
Пример использования встроенного примера:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
ОБНОВЛЕНИЕ: В PHP 7. 3+: использовать (конечно) недавно добавленный array_key_last()
.
Ответ 17
Вот так:
$keys = array_keys($array);
$lastKey = $keys[sizeof($array)-1];
Ответ 18
Это должно быть что-то вроде этого...
$latest_kid = end(array_reverse(array_keys($my_array)));
Измените массив, когда мы вызываем array_keys.