Как я могу получить последний ключ массива?
Решение заключалось бы в использовании комбинации 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()
) ;; но вы правы в указании этой функции, которая может быть полезной.
Хотя end()
кажется самым простым , он не самый быстрый.
Чем быстрее, тем сильнее альтернатива array_slice()
Вычеркнуть редактор: эта претензия не была обоснована и в комментариях упоминалось противоположное доказательство. Если есть об истине к этим утверждениям плаката о скорости/эффективности, а затем контрольный тест должен быть предоставлен.
$last_key = key( array_slice( $array, -1, 1, TRUE ) );
end($arr);$key = key($arr);reset($arr);
против (б) $key = key(array_slice($arr,-1,1,true));
... что приводит к тому, что end()
НАМНОГО быстрее! end () = 0,05326 секунд, array_slice = 8,506 секунд ... да ??
Я предпочитаю
end(array_keys($myarr))
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
?>
Я просто взял вспомогательную функцию от 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));
Вы можете использовать это:
$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);
Я также хотел бы предложить альтернативное решение этой проблемы.
Предполагая, что все ваши ключи являются числовыми без каких-либо пробелов, мой предпочтительный метод состоит в том, чтобы подсчитать массив, а затем минус 1 из этого значения (чтобы учесть тот факт, что ключи массива начинаются с 0.
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
Это даст вам:
Int (1) кот
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
Вот так:
$keys = array_keys($array);
$lastKey = $keys[sizeof($array)-1];
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
Это работает, потому что PHP перемещает его указатель на массив внутри $array
Это должно быть что-то вроде этого...
$latest_kid = end(array_reverse(array_keys($my_array)));
Измените массив, когда мы вызываем array_keys.