Как получить Последний ключ в массиве?
Как я могу получить Последний ключ массива?
16 ответов
решением было бы использовать комбинацию end
и key
(цитирую) :
-
end()
продвигает внутренний указатель массива на последний элемент и возвращает его значение. -
key()
возвращает элемент index текущей позиции массива.
Итак, часть кода, такая как этот, должна сделать трюк :
$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()
на массиве, чтобы вернуть указатель к началу массива.
хотя end()
кажется, самый простой, это не самый быстрый.
более быстрая, и гораздо более сильная альтернатива array_slice()
вычеркнуть редактором: это утверждение не было обосновано и в комментариях были упомянуты доказательства обратного. Если они есть клочок истины к утверждениям этого плаката о скорости / эффективности, то необходимо обеспечить контрольное испытание.
$last_key = key( array_slice( $array, -1, 1, TRUE ) );
Не знаю, будет ли это быстрее или нет, но кажется проще сделать это таким образом, и вы избегаете ошибки, не передавая функцию в end()...
ему просто нужна переменная... не так уж важно написать еще одну строку кода, а затем отменить ее, если вам нужно.
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
С 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
попробуйте использовать array_pop и array_keys следующим образом:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
Я также хотел бы предложить альтернативное решение этой проблемы.
предполагая, что все ваши ключи числовые без каких-либо пробелов, мой предпочтительный метод-подсчитать массив, затем минус 1 от этого значения (чтобы учесть тот факт, что ключи массива начинаются с 0.
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
Это даст вам:
int(1) кошка!--2-->
Вы можете использовать это:
$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);
Я просто взял вспомогательную функцию от 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));
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
по состоянию на 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()
) также предложил бы указатель-невежественный доступ к элементам bookend, но они, очевидно, не смогли набрать достаточное количество голосов, чтобы оживить.
вот некоторые соответствующие страницы обсуждения новых особенности:
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
это работает, потому что PHP перемещает указатель массива внутренне для $array
наилучшее возможное решение, которое также можно использовать, используется inline:
end($arr) && false ?: key($arr)
перед donwvoting это решение дайте мне знать, если у вас есть лучшее решение, которое может быть встроено, а также иметь примерно такую же или лучшую производительность.
встроенный пример использования:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
Это должно быть что-то вроде этого...
$latest_kid = end(array_reverse(array_keys($my_array)));
причина обратного массива при вызове array_keys.