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

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

Ответ 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()

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

  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()) также предлагали бы доступ к элементам 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.