Intereting Posts
Как я могу взорвать массив, пропуская пустые элементы массива? как я могу создать личный поддомен программным образом с помощью php Вызов неопределенной функции readline ()? Как я могу заставить PHP отображать заголовки, полученные из браузера? Symfony2: как переопределить основной шаблон? Что быстрее: многие ifs, а если? как ограничить число символов в текстовой области обработки php? Кэширование запросов MySQL Как объединить результаты из нескольких таблиц с разными столбцами? Использовать API OAuth или Public Key для частного приложения YouTube? Как определить размер изображения без его загрузки (в полном объеме)? Получение информации из массива внутри массива (php) любой хороший php-учебник о том, как отправлять sms на телефоны? Запретить IIS изменять ответ при наличии заголовка местоположения Объяснение повторно используемых структур в OO PHP

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

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

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