배열의 마지막 키를 어떻게 얻을 수 있습니까?
배열의 마지막 키를 어떻게 얻을 수 있습니까?
답변:
해결책은 조합 사용하는 것 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()
포인터를 배열의 시작 부분으로 다시 가져 오기 위해 배열에서 실행할 수 있습니다 .
reset()
) ; 그러나 당신은 그 기능을 가리키는 것이 옳습니다.
array('a', 'b', 'c', 'd', 'a')
그것은 키 4가 아닌 0을 리턴 할 것이기 때문입니다.
하지만 end()
가장 쉬운 것 같다, 그것은 가장 빠른 아니다. 더 빠르고 강력한 대안은 array_slice()
다음과 같습니다.
$lastKey = key(array_slice($array, -1, 1, true));
테스트에서 알 수 있듯이 500000 요소가있는 배열에서는 거의 7 배 빠릅니다!
end($arr);$key = key($arr);reset($arr);
와 (b) $key = key(array_slice($arr,-1,1,true));
...를 비교하여 100,000 반복의 빠른 테스트를 수행했습니다 end()
. end () = 0.05326 초, array_slice = 8.506 초 ... huh ??
end()
다음과 같은 매우 간단한 C 함수에서 파생 될 수 있기 때문에 가장 빠릅니다.int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
마지막 요소에 대한 내부 포인터 가 있다고 생각합니다 . end()
거의 O (1) 만들기 . :-)
나는 선호한다
end(array_keys($myarr))
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];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
이다 당신이 시간 예산에있을 때 재미 있지만 사업에는 좋지 않다
$a[1] = 1; $a[5] = 5; $a[0] = 0;
키 (1, 5, 0)의 순서로 배열됩니다. count($a)
3을 산출하고 $a[2]
정의되지 않습니다. 확실히 5를 돌려주지 않습니다.
이것이 더 빠를 지 아닌지 모르지만, 이렇게하는 것이 더 쉬운 것처럼 보이고, 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()
)도 포인터 불명료 한 북 엔드 요소에 대한 액세스를 제공했을 것입니다.다음은 새로운 기능에 대해 설명하는 관련 페이지입니다.
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
다음과 같이 array_pop 및 array_keys 함수를 사용해보십시오 .
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
의 리턴 값에서 동작 array_keys()
하고 있지 일본어 어레이.
PHP에서 == 7.3 array_key_last()
은 배열의 마지막 키를 얻는 가장 좋은 방법입니다. 의 조합을 사용하여 end()
, key()
그리고 reset()
단지 배열의 마지막 키를 얻기 위해하는 것은 터무니없는 것입니다.
$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3
그것을 비교
end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)
end()
와 조합을 사용하는 경우 포인터가 시작 부분에 있도록 배열을 재설정해야합니다.key()
또한이 문제에 대한 대안 솔루션을 제공하고 싶습니다.
모든 키가 공백없이 숫자라고 가정하면, 선호하는 방법은 배열 키를 0에서 시작한다는 사실을 고려하여 배열을 세고 그 값에서 1을 뺀 것입니다.
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
이것은 당신에게 줄 것입니다 :
int (1) 고양이
이것을 사용할 수 있습니다 :
$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);
$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 내부적으로 배열 포인터를 이동하기 때문에 작동합니다.