[php] 배열에서 마지막 키를 얻는 방법?

배열의 마지막 키를 어떻게 얻을 수 있습니까?



답변

해결책은 조합 사용하는 것 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의 의견 .

즉, 다음없이 최종 키 값을 검색 할 수 있습니다.

  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())도 포인터 불명료 한 북 엔드 요소에 대한 액세스를 제공했을 것입니다.

다음은 새로운 기능에 대해 설명하는 관련 페이지입니다.

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