배열의 마지막 키를 어떻게 얻을 수 있습니까?
답변
해결책은 조합 사용하는 것 end
과 (인용)를 :key
end()
array의 내부 포인터를 마지막 요소로 이동시키고 값을 반환합니다.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()
다음과 같습니다.
$lastKey = key(array_slice($array, -1, 1, true));
테스트에서 알 수 있듯이 500000 요소가있는 배열에서는 거의 7 배 빠릅니다!
답변
나는 선호한다
end(array_keys($myarr))
답변
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
답변
그냥 사용하십시오 : echo $array[count($array) - 1];
답변
이것이 더 빠를 지 아닌지 모르지만, 이렇게하는 것이 더 쉬운 것처럼 보이고, end ()에 함수를 전달하지 않아 오류를 피할 수 있습니다 …
단지 한 줄의 코드를 작성하는 데 큰 변수가 아닌 변수가 필요했습니다. 필요한 경우 설정을 해제하십시오.
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
답변
현재로 PHP7.3 직접의 마지막 키 (의 외부 수준)와 배열에 액세스 할 수 있습니다 ) (array_key_last를
결정적으로이 페이지에 대한 많은 논쟁이 잠들었습니다. 이 솔루션은 최고의 성능을 발휘하며 부작용이 없으며 직접적으로 직관적 인 단일 통화 기술로이 질문이 추구하는 것을 제공합니다.
증거로서의 대략적인 벤치 마크 : https://3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
* 테스트 배열에는 500000 개의 요소가 포함되며, 마이크로 타임은 100x 반복되고 평균은 과학적 표기법을 피하기 위해 1000을 곱한 값입니다. @TadejMagajna의 답변 에 따르면 초기 벤치 마크에 대한 @MAChitgarha의 의견 .
즉, 다음없이 최종 키 값을 검색 할 수 있습니다.
- 배열 포인터 이동 (두 줄의 코드 필요) 또는
- 정렬, 역전, 팝핑, 카운팅, 키 배열 인덱싱
이 기능은 오래 전부터 사용되어 성능을 개선하고 원하지 않는 부작용을 피하며 깨끗하고 직접적인 / 직관적 인 코드를 가능하게하는 어레이 기능 공구 벨트에 추가되었습니다.
데모 는 다음과 같습니다 .
$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()
)도 포인터 불명료 한 북 엔드 요소에 대한 액세스를 제공했을 것입니다.
다음은 새로운 기능에 대해 설명하는 관련 페이지입니다.
- https://laravel-news.com/outer-array-functions-php-7-3
- https://kinsta.com/blog/php-7-3/#array-key-first-last
- https://wiki.php.net/rfc/array_key_first_last
ps 누군가가 다른 기술 중 일부를 계량하고 있다면, 당신은이 작은 비교 모음을 참조 할 수 있습니다 : ( Demo )
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408