연관 배열에서 첫 번째 키를 결정하는 가장 좋은 방법은 무엇입니까? 내 첫 번째는 배열을 foreach 한 다음 즉시 다음과 같이 깨는 것이라고 생각했습니다.
foreach ($an_array as $key => $val) break;
따라서 $ key가 첫 번째 키를 포함하지만 이것은 비효율적입니다. 누구든지 더 나은 솔루션을 가지고 있습니까?
답변
2019 년 업데이트
PHP 7.3 부터 array_key_first()
내부 포인터를 재설정하지 않고 주어진 배열에서 첫 번째 키를 검색 하는 새로운 내장 함수 가 있습니다. 자세한 내용 은 설명서 를 확인하십시오 .
reset($array);
$first_key = key($array);
기본 코드는 초기 코드와 동일하지만 약간의 오버 헤드가 적으며 현재 상황이 더 분명합니다.
를 호출해야합니다 reset
. 그렇지 않으면 배열에 키가있을 수 있습니다. end
대신 reset
마지막 키를 얻는 대신 사용할 수도 있습니다 .
키가 첫 번째 값을 reset
얻길 원한다면 실제로 반환합니다.
$first_value = reset($array);
그래도 조심해야 할 특별한 경우가 있습니다 (먼저 배열의 길이를 확인하십시오).
$arr1 = array(false);
$arr2 = array();
var_dump(reset($arr1) === reset($arr2)); // bool(true)
답변
array_keys
키 배열을 반환합니다. 첫 번째 항목을 가져 가십시오. 또는 reset
배열을 호출 할 수 key
있습니다. 후자의 접근 방식은 아마도 약간 빠르지 만 (내가 테스트하지는 않았지만) 내부 포인터를 재설정하면 부작용이 있습니다.
답변
흥미롭게도 foreach 루프는 실제로 가장 효율적인 방법입니다.
OP가 효율성에 대해 구체적으로 요구했기 때문에 모든 현재 답변이 실제로 foreach보다 훨씬 덜 효율적이라는 점을 지적해야합니다.
나는 PHP 5.4로 이것에 대한 벤치 마크를했고, 리셋 / 키 포인터 방법 (허용 된 대답)은 foreach보다 약 7 배 느리게 보입니다. 전체 배열 (array_keys, array_flip)을 조작하는 다른 접근법은 분명히 그보다 느리고 대형 배열로 작업 할 때 훨씬 나빠 집니다 .
Foreach는 전혀 비효율적이지 않으므로 자유롭게 사용하십시오!
2015-03-03 수정 :
벤치 마크 스크립트가 요청되었습니다. 원본 스크립트는 없지만 새로운 테스트를했습니다. 이번에는 foreach가 재설정 / 키보다 약 두 배 빠릅니다. 100 키 배열을 사용하고 각 방법을 백만 번 실행하여 눈에 띄는 차이를 얻었습니다. 간단한 벤치 마크 코드는 다음과 같습니다.
$array = [];
for($i=0; $i < 100; $i++)
$array["key$i"] = $i;
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
foreach ($array as $firstKey => $firstValue) {
break;
}
}
echo "foreach to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstValue = reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstKey = array_keys($array)[0];
}
echo "array_keys to get first key: " . (microtime(true) - $start) . " seconds <br />";
내 PHP 5.5에서는 다음과 같이 출력됩니다.
foreach to get first key and value: 0.15501809120178 seconds
reset+key to get first key and value: 0.29375791549683 seconds
reset+key to get first key: 0.26421809196472 seconds
array_keys to get first key: 10.059751987457 seconds
재설정 + 키 http://3v4l.org/b4DrN/perf#tabs
foreach는 http://3v4l.org/gRoGD/perf#tabs
답변
key($an_array)
첫 번째 열쇠를 줄 것이다
Blixt 당 편집 : 포인터를 배열의 시작 부분으로 재설정 reset($array);
하기 전에 호출 해야 key($an_array)
합니다.