Как получить Последний ключ в массиве?

Как я могу получить Последний ключ массива?

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_keys($myarr))

просто использовать : echo $array[count($array) - 1];


Не знаю, будет ли это быстрее или нет, но кажется проще сделать это таким образом, и вы избегаете ошибки, не передавая функцию в 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()

это означает, что вы можете получить значение конечного ключа без:

  1. перемещение указателя массива (для чего требуется две строки кода) или
  2. сортировка, реверсирование, выскакивание, подсчет, индексирование массива ключей или любая другая глупость

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

здесь демо:

$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
);

такой:

$keys = array_keys($array);
$lastKey = $keys[sizeof($array)-1];

Это должно быть что-то вроде этого...

$latest_kid = end(array_reverse(array_keys($my_array)));

причина обратного массива при вызове array_keys.