it-swarm.com.ru

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

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

303
ajsie

Решением было бы использование комбинации 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() в массиве, чтобы вернуть указатель в начало массива.

569
Pascal MARTIN

Хотя end() кажется самым простымЭто не самый быстрый.

Более быстрая и гораздо более сильная альтернатива - array_slice() </ s>

Зачеркнутый редактором: эта претензия не была обоснована и в комментариях было упомянуто противоположное доказательство. Если есть правду к утверждениям этого автора о скорости/эффективности, а затем эталонный тест должен быть предоставлен.

$last_key = key( array_slice( $array, -1, 1, TRUE ) );
64
Tadej Magajna

Я предпочитаю 

end(array_keys($myarr))
47
Rutger van Baren

Просто используйте: echo $array[count($array) - 1];

29
Aditya Choudhary

Поскольку 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
25
Patryk Godowski

Не знаю, будет ли это быстрее или нет, но, кажется, проще сделать это таким образом, и вы избежите ошибки, не передав функцию в end () ... 

просто нужна переменная ... ничего страшного, чтобы написать еще одну строчку кода, а затем сбросить ее, если нужно.

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

$keys = array_keys($array);
$last = end($keys);
19
Ryan Hungate

Попробуйте использовать array_pop и array_keys function следующим образом:

<?php

$array = array(
    'one' => 1,
    'two' => 2,
    'three' => 3
);

echo array_pop(array_keys($array)); // prints three

?>
8
codaddict

Начиная с 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, но они, очевидно, не смогли набрать достаточное количество голосов, чтобы воплотиться в жизнь.

Вот несколько соответствующих страниц, обсуждающих новые функции:

5
mickmackusa

Вы можете использовать это:

$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);
3
Atif Tariq

Я просто взял вспомогательную функцию у Ксандера и улучшил ее ответами:

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));
3
Steve

Я также хотел бы предложить альтернативное решение этой проблемы.

Предполагая, что все ваши ключи являются числовыми без пробелов, Мой предпочтительный метод - подсчитать массив, затем минус 1 от этого значения (чтобы учесть тот факт, что ключи массива начинаются с 0.

$array = array(0=>'dog', 1=>'cat');

$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];

var_dump($lastKey);
print_r($lastKeyValue);

Это даст вам:

int (1) кошка

3
user2732377
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
2
voodoo417

Попробуйте это с array_reverse()

 $arr = array(
     'first' => 01,
     'second' => 10,
     'third' => 20, 
 );  
 $key = key(array_reverse($arr));
 var_dump($key);
0
Vishal