Как я могу получить последний ключ массива?
Решением было бы использовать комбинацию 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)
т.е. ключ последнего элемента моего массива.
Хотя 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);
Попробуйте использовать функции 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) cat
Вы можете использовать это:
$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
$array = array( 'something' => array(1,2,3), 'somethingelse' => array(1,2,3,4) ); $last_value = end($array); $last_key = key($array); // 'somethingelse'
Это работает, потому что PHP перемещает указатель на массив внутри массива $ array
Как это:
$keys = array_keys($array); $lastKey = $keys[sizeof($array)-1];
Это должно быть что-то вроде этого …
$latest_kid = end(array_reverse(array_keys($my_array)));
Потому что он меняет массив, когда мы вызываем array_keys.