sourcecode

배열의 마지막 요소를 삭제하지 않고 가져오는 방법은 무엇입니까?

copyscript 2023. 6. 13. 22:30
반응형

배열의 마지막 요소를 삭제하지 않고 가져오는 방법은 무엇입니까?

네 알겠습니다,

에 대해 모두 알고 있지만 마지막 요소가 삭제됩니다.배열의 마지막 요소를 삭제하지 않고 가져오는 방법은 무엇입니까?

보너스입니다.

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');

아니 심지어는

$array = array('a', 'b', 'c', 'd');
unset($array[2]);
echo $array[sizeof($array) - 1]; // Output: PHP Notice:  Undefined offset:  2 in - on line 4

시도:

$myLastElement = end($yourArray);

전달된 배열의 마지막 요소만 반환하는 것이 아니라 , , 및 에서 사용하는 배열의 내부 포인터도 수정합니다.

PHP >= 7.3.0의 경우:

PHP 버전 7.3.0 이상을 사용하는 경우 를 사용하면 내부 포인터를 수정하지 않고 배열의 마지막 키를 반환할 수 있습니다.마지막 값을 얻으려면 다음 작업을 수행합니다.

$myLastElement = $yourArray[array_key_last($yourArray)];

이 스레드의 많은 답변은 다양한 옵션을 제공합니다.그들 중에서 선택할 수 있기 위해서는 그들의 행동과 성과를 이해해야 했습니다. 버전 이 답 서 저 는 PHP 버 비 여 연 결 공 겠 하 습 유 니 다 를 과 구 제 된 크 마 벤 하 변 치 교 에 전 과 ▁with ▁against ▁php ▁in ▁findings ▁benchmark ▁i 이 ▁my 니 , 다 습 겠 ▁answer ▁this ▁versions ▁you 하 ▁share 공 유5.6.38,7.2.10그리고.7.3.0RC1(2018년 12월 13일 예상).

옵션(()<<option code>>테스트 대상:

  • tftp.1.1. $x = array_values(array_slice($array, -1))[0];(롤락자제안한 대로)
  • 옵션 .2. $x = array_slice($array, -1)[0];(Stoutie가 제안한 대로)
  • 옵션 .3. $x = array_pop((array_slice($array, -1)));(롤락자제안한 대로)
  • 옵션 .4. $x = array_pop((array_slice($array, -1, 1)));(Westy92에서 제안한 대로)
  • 옵션 .5. $x = end($array); reset($array);(이즈노굿제안한 대로)
  • 129.6. $x = end((array_values($array)));(TecBrat이 제안한 대로)
  • 129.7. $x = $array[count($array)-1];(Mirko Pagliai가 제안한 대로)
  • 옵션 .8. $keys = array_keys($array); $x = $array[$keys[count($keys)-1]];(thrau가 제안한 대로)
  • 옵션 .9. $x = $array[] = array_pop($array);(사용자 2782001에서 제안한 대로)
  • 옵션 10. $x = $array[array_key_last($array)];(Quasimodo의 클론에서 제안한 대로, PHP 7.3에 따라 사용 가능)

(자세한 내용: array_key_last, array_keys, array_pop, array_values, count, end, reset)

입력테스입력트(입()<<input code>>결합 대상:

  • null =$array = null;
  • 비어 있음 =$array = [];
  • last_filename =$array = ["a","b","c",null];
  • auto_idx =$array = ["a","b","c","d"];
  • 셔플 =$array = []; $array[1] = "a"; $array[2] = "b"; $array[0] = "c";
  • 100 =$array = []; for($i=0;$i<100;$i++) { $array[] = $i; }
  • 100000 =$array = []; for($i=0;$i<100000;$i++) { $array[] = $i; }

는 테트를위다사용다니합음을해스▁the를 하겠습니다.5.6.38,7.2.10그리고.7.3.0RC1 다음과 같은 PHP 도커 컨테이너:

sudo docker run -it --rm php:5.6.38-cli-stretch php -r '<<<CODE HERE>>>'

된 각 은 다음과 같습니다.<<option code>>모래땅<<input code>>PHP에서 됩니다.에는 다음 됩니다.

<<input code>>  error_reporting(E_ALL);  <<option code>>  error_reporting(0); $before=microtime(TRUE); for($i=0;$i<100;$i++){echo ".";for($j=0;$j<100;$j++){  <<option code>>  }}; $after=microtime(TRUE); echo "\n"; var_dump($x); echo round(($after-$before)/(100*100)*1000*1000*1000);

각 실행에 대해 마지막으로 검색된 테스트 입력 값을 var_dump하고 1회 반복의 평균 지속 시간을 펨토초(0.00000000001분의 1초) 단위로 인쇄합니다.

결과는 다음과 같습니다.

/==========================================================================================================================================================================================================================================================================================================================================================================================================================\
||                                                                      ||                            T  E  S  T     I  N  P  U  T     -     5  .  6  .  3  8                            ||                             T  E  S  T     I  N  P  U  T     -     7  .  2  .  1  0                           ||                             T  E  S  T     I  N  P  U  T     -     7  .  3  .  0  R  C  1                     ||
||                                                                      ||          null |         empty |     last_null |      auto_idx |       shuffle |           100 |        100000 ||          null |         empty |     last_null |      auto_idx |       shuffle |           100 |        100000 ||          null |         empty |     last_null |      auto_idx |       shuffle |           100 |        100000 ||
||============================OPTIONS - ERRORS==========================++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============<|
||  1.  $x = array_values(array_slice($array, -1))[0];                  ||       W1 + W2 |            N1 |             - |             - |             - |             - |             - ||       W1 + W2 |            N1 |             - |             - |             - |             - |             - ||       W1 + W2 |            N1 |             - |             - |             - |             - |             - ||
||  2.  $x = array_slice($array, -1)[0];                                ||            W1 |            N1 |             - |             - |             - |             - |             - ||            W1 |            N1 |             - |             - |             - |             - |             - ||            W1 |            N1 |             - |             - |             - |             - |             - ||
||  3.  $x = array_pop((array_slice($array, -1)));                      ||       W1 + W3 |             - |             - |             - |             - |             - |             - ||  W1 + N2 + W3 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||  W1 + N2 + W3 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||
||  4.  $x = array_pop((array_slice($array, -1, 1)));                   ||       W1 + W3 |             - |             - |             - |             - |             - |             - ||  W1 + N2 + W3 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||  W1 + N2 + W3 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||
||  5.  $x = end($array); reset($array);                                ||       W4 + W5 |             - |             - |             - |             - |             - |             - ||       W4 + W5 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||       W4 + W5 |             - |             - |             - |             - |             - |             - ||
||  6.  $x = end((array_values($array)));                               ||       W2 + W4 |             - |             - |             - |             - |             - |             - ||  W2 + N2 + W4 |             - |             - |             - |             - |             - |             - ||  W2 + N2 + W4 |            N2 |            N2 |            N2 |            N2 |            N2 |            N2 ||
||  7.  $x = $array[count($array)-1];                                   ||             - |            N3 |             - |             - |             - |             - |             - ||            W7 |            N3 |             - |             - |             - |             - |             - ||            W7 |            N3 |             - |             - |             - |             - |             - ||
||  8.  $keys = array_keys($array); $x = $array[$keys[count($keys)-1]]; ||            W6 |       N3 + N4 |             - |             - |             - |             - |             - ||       W6 + W7 |       N3 + N4 |             - |             - |             - |             - |             - ||       W6 + W7 |       N3 + N4 |             - |             - |             - |             - |             - ||
||  9.  $x = $array[] = array_pop($array);                              ||            W3 |             - |             - |             - |             - |             - |             - ||            W3 |             - |             - |             - |             - |             - |             - ||            W3 |             - |             - |             - |             - |             - |             - ||
|| 10.  $x = $array[array_key_last($array)];                            ||            F1 |            F1 |            F1 |            F1 |            F1 |            F1 |            F1 ||            F2 |            F2 |            F2 |            F2 |            F2 |            F2 |            F2 ||            W8 |            N4 |            F2 |            F2 |            F2 |            F2 |            F2 ||
||========================OPTIONS - VALUE RETRIEVED=====================++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============<|
||  1.  $x = array_values(array_slice($array, -1))[0];                  ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  2.  $x = array_slice($array, -1)[0];                                ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  3.  $x = array_pop((array_slice($array, -1)));                      ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  4.  $x = array_pop((array_slice($array, -1, 1)));                   ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  5.  $x = end($array); reset($array);                                ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  6.  $x = end((array_values($array)));                               ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |   bool(false) |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  7.  $x = $array[count($array)-1];                                   ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "b" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "b" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "b" |       int(99) |    int(99999) ||
||  8.  $keys = array_keys($array); $x = $array[$keys[count($keys)-1]]; ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
||  9.  $x = $array[] = array_pop($array);                              ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||          NULL |          NULL |          NULL | string(1) "d" | string(1) "c" |       int(99) |    int(99999) ||
|| 10.  $x = $array[array_key_last($array)];                            ||           N/A |           N/A |           N/A |           N/A |           N/A |           N/A |           N/A ||           N/A |           N/A |           N/A |           N/A |           N/A |           N/A |           N/A ||           N/A |           N/A |           N/A |           N/A |           N/A |           N/A |           N/A ||
||=================OPTIONS - FEMTOSECONDS PER ITERATION=================++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============++===============+===============+===============+===============+===============+===============+===============<|
||  1.  $x = array_values(array_slice($array, -1))[0];                  ||           803 |           466 |           390 |           384 |           373 |           764 |     1.046.642 ||           691 |           252 |           101 |           128 |            93 |           170 |        89.028 ||           695 |           235 |            90 |            97 |            95 |           188 |        87.991 ||
||  2.  $x = array_slice($array, -1)[0];                                ||           414 |           349 |           252 |           248 |           246 |           604 |     1.038.074 ||           373 |           249 |            85 |            91 |            90 |           164 |        90.750 ||           367 |           224 |            78 |            85 |            80 |           155 |        86.141 ||
||  3.  $x = array_pop((array_slice($array, -1)));                      ||           724 |           228 |           323 |           318 |           350 |           673 |     1.042.263 ||           988 |           285 |           309 |           317 |           331 |           401 |        88.363 ||           877 |           266 |           298 |           300 |           326 |           403 |        87.279 ||
||  4.  $x = array_pop((array_slice($array, -1, 1)));                   ||           734 |           266 |           358 |           356 |           349 |           699 |     1.050.101 ||           887 |           288 |           316 |           322 |           314 |           408 |        88.402 ||           935 |           268 |           335 |           315 |           313 |           403 |        86.445 ||
||  5.  $x = end($array); reset($array);                                ||           715 |           186 |           185 |           180 |           176 |           185 |           172 ||           674 |            73 |            69 |            70 |            66 |            65 |            70 ||           693 |            65 |            85 |            74 |            68 |            70 |            69 ||
||  6.  $x = end((array_values($array)));                               ||           877 |           205 |           320 |           337 |           304 |         2.901 |     7.921.860 ||           948 |           300 |           336 |           308 |           309 |           509 |    29.696.951 ||           946 |           262 |           301 |           309 |           302 |           499 |    29.234.928 ||
||  7.  $x = $array[count($array)-1];                                   ||           123 |           300 |           137 |           139 |           143 |           140 |           144 ||           312 |           218 |            48 |            53 |            45 |            47 |            51 ||           296 |           217 |            46 |            44 |            53 |            53 |            55 ||
||  8.  $keys = array_keys($array); $x = $array[$keys[count($keys)-1]]; ||           494 |           593 |           418 |           435 |           399 |         3.873 |    12.199.450 ||           665 |           407 |           103 |           109 |           114 |           431 |    30.053.730 ||           647 |           445 |            91 |            95 |            96 |           419 |    30.718.586 ||
||  9.  $x = $array[] = array_pop($array);                              ||           186 |           178 |           175 |           188 |           180 |           181 |           186 ||            83 |            78 |            75 |            71 |            74 |            69 |            83 ||            71 |            64 |            70 |            64 |            68 |            69 |            81 ||
|| 10.  $x = $array[array_key_last($array)];                            ||           N/A |           N/A |           N/A |           N/A |           N/A |           N/A |           N/A ||           N/A |           N/A |           N/A |           N/A |           N/A |           N/A |           N/A ||           370 |           223 |            49 |            52 |            61 |            57 |            52 ||
 \=========================================================================================================================================================================================================================================================================================================================================================================================================================/ 

위에서 언급한 치명적, 경고 및 알림 코드는 다음과 같습니다.

F1 = Fatal error: Call to undefined function array_key_last() in Command line code on line 1
F2 = Fatal error: Uncaught Error: Call to undefined function array_key_last() in Command line code:1
W1 = Warning: array_slice() expects parameter 1 to be array, null given in Command line code on line 1
W2 = Warning: array_values() expects parameter 1 to be array, null given in Command line code on line 1
W3 = Warning: array_pop() expects parameter 1 to be array, null given in Command line code on line 1
W4 = Warning: end() expects parameter 1 to be array, null given in Command line code on line 1
W5 = Warning: reset() expects parameter 1 to be array, null given in Command line code on line 1
W6 = Warning: array_keys() expects parameter 1 to be array, null given in Command line code on line 1
W7 = Warning: count(): Parameter must be an array or an object that implements Countable in Command line code on line 1
W8 = Warning: array_key_last() expects parameter 1 to be array, null given in Command line code on line 1
N1 = Notice: Undefined offset: 0 in Command line code on line 1
N2 = Notice: Only variables should be passed by reference in Command line code on line 1
N3 = Notice: Undefined offset: -1 in Command line code on line 1
N4 = Notice: Undefined index:  in Command line code on line 1

이 결과를 바탕으로 다음과 같은 결론을 도출합니다.

  • PHP의 새로운 버전은 상당히 느려진 다음 옵션을 제외하고 더 나은 성능을 발휘합니다.
    • 옵션 .6. $x = end((array_values($array)));
    • 옵션 .8. $keys = array_keys($array); $x = $array[$keys[count($keys)-1]];
  • 대규모 어레이에 가장 적합하게 확장 가능한 옵션:
    • 옵션 .5. $x = end($array); reset($array);
    • 옵션 .7. $x = $array[count($array)-1];
    • 옵션 .9. $x = $array[] = array_pop($array);
    • 옵션 10. $x = $array[array_key_last($array)]; 7PHP 7.3 버전)
  • 다음 옵션은 자동 검색 어레이에만 사용해야 합니다.
    • 129.7. $x = $array[count($array)-1];의으로 인해count)
    • 옵션 .9. $x = $array[] = array_pop($array);키를 을 할당하기 에).
  • 옵션은 어레이의 내부 포인터를 보존하지 않습니다.
    • 옵션 .5. $x = end($array); reset($array);
  • 이 옵션은 어레이의 내부 포인터를 보존하기 위해 옵션 .5를 수정하려는 시도입니다(슬프게도 매우 큰 어레이의 경우 확장성이 좋지 않습니다).
    • 옵션 .6. $x = end((array_values($array)));
  • 간의신array_key_last함수는 이 글을 쓸 때 여전히 RC인 것을 제외하고는 위에서 언급한 제한 사항이 없는 것 같습니다(따라서 RC를 사용하거나 2018년 12월 출시를 기다립니다).
    • 옵션 10. $x = $array[array_key_last($array)]; 7PHP 7.3 버전)

배열을 스택으로 사용할 것인지 큐로 사용할 것인지에 따라 옵션 9를 변경할 수 있습니다.

짧고 달콤합니다.

오류 메시지를 제거하고 한 줄 형식과 효율적인 성능을 유지하기 위한 솔루션을 고안했습니다.

$lastEl = array_values(array_slice($array, -1))[0];

이전의 해결책

$lastEl = array_pop((array_slice($array, -1)));

참고: 추가 괄호가 필요합니다.PHP Strict standards: Only variables should be passed by reference.

그래요?array_slice($array, -1)(설명서 참조: http://us1.php.net/array_slice)

array_slice()배열을 반환합니다.아마도 당신이 찾고 있는 것이 아닐 것입니다.당신은 그 요소를 원합니다.

내부 포인터를 수정하지 않는 경우(다음 줄은 인덱스 배열과 연관 배열을 모두 지원함):

// false if empty array
$last = end($array);

// null if empty array
$last = !empty($array) ? end($array) : null;


내부 포인터를 수정하지 않는 유틸리티 함수를 원하는 경우(배열이 함수에 값으로 전달되어 함수의 복사본에서 작동하기 때문에):

function array_last($array) {
    if (empty($array)) {
        return null;
    }
    return end($array);
}


그러나 PHP는 실제로 필요할 때만 "즉시" 복사본을 생성합니다.end()함수가 배열을 수정하면 내부적으로 전체 배열의 복사본(하나의 항목 포함)이 생성됩니다.


따라서 내부적으로 어레이를 복사하지 않고 슬라이스만 만들기 때문에 실제로 더 빠른 다음과 같은 대안을 추천합니다.

function array_last($array) {
    if (empty($array)) {
        return null;
    }
    foreach (array_slice($array, -1) as $value) {
        return $value;
    }
}

또한 "forach/return"은 첫 번째(그리고 여기서 단일) 항목을 효율적으로 얻기 위한 조정입니다.


마지막으로 색인화된 어레이(갭이 없는 어레이)에 한해 가장 빠른 대안:

$last = !empty($array) ? $array[count($array)-1] : null;


참고로, 여기 배열의 첫 번째 요소에 대한다른 대답이 있습니다.

기준별 오류를 방지하는 한 가지 방법(예:"end(array_values(foo))"는 call_user_func 또는 call_user_func_array를 사용하는 것입니다.

// PHP Fatal error: Only variables can be passed by reference
// No output (500 server error)
var_dump(end(array(1, 2, 3)));

// No errors, but modifies the array's internal pointer
// Outputs "int(3)"
var_dump(call_user_func('end', array(1, 2, 3)));

// PHP Strict standards:  Only variables should be passed by reference
// Outputs "int(3)"
var_dump(end(array_values(array(1, 2, 3))));

// No errors, doesn't change the array
// Outputs "int(3)"
var_dump(call_user_func('end', array_values(array(1, 2, 3))));

저는 스택을 처리하기 위해 이것이 꽤 자주 필요합니다. 그리고 저는 항상 어떤 형태로든 배열이나 내부 포인터를 조작하지 않고는 그것을 수행하는 기본 기능이 없다는 것을 알게 됩니다.

그래서 저는 보통 연상배열에서도 안전하게 사용할 수 있는 유틸리티 기능을 가지고 다닙니다.

function array_last($array) {
    if (count($array) < 1)
        return null;

    $keys = array_keys($array);
    return $array[$keys[sizeof($keys) - 1]];
}

7 PHP 버 7.3 후 능array_key_first그리고.array_key_last소개되었습니다.

PHP의 배열은 엄격한 배열 유형, 즉 인덱스 0에서 시작하는 고정 크기 필드의 고정 크기 집합이 아니라 동적으로 확장된 연관 배열이기 때문에 알 수 없는 키를 가진 위치를 처리하는 것이 어렵고 해결 방법이 잘 수행되지 않습니다.반대로 실제 배열은 포인터 산술을 통해 내부적으로 매우 빠르게 처리되며 마지막 인덱스는 선언에 의해 컴파일 시간에 이미 알려져 있습니다.

적어도 첫 번째와 마지막 위치의 문제는 버전 7.3 이후로 내장된 기능으로 해결되었습니다.이 기능은 어레이 리터럴에 대한 경고 없이도 작동합니다.

$first = array_key_first( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );
$last  = array_key_last ( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );

분명히 마지막 값은 다음과 같습니다.

$array[array_key_last($array)];

테스트되지 않음: 이것이 작동하지 않을까요?

<?php
$last_element=end(array_values($array));
?>

array_values에 의해 반환된 배열은 일시적이기 때문에 포인터가 재설정되는지 여부는 아무도 신경 쓰지 않습니다.

열쇠가 필요하시면 그렇게 하세요

<?php
$last_key=end(array_keys($array));
?>

배열의 마지막 요소를 가져오려면 다음을 사용합니다.

$lastElement = array_slice($array, -1)[0];

벤치마크

각각 100개와 50,000개의 요소를 포함하는 소규모 및 대규모 어레이의 마지막 요소를 잡고 1,000번 반복했습니다.

Method: $array[count($array)-1];
Small array (s): 0.000319957733154
Large array (s): 0.000526905059814
Note: Fastest!  count() must access an internal length property.
Note: This method only works if the array is naturally-keyed (0, 1, 2, ...).

Method: array_slice($array, -1)[0];
Small array (s): 0.00145292282104
Large array (s): 0.499367952347

Method: array_pop((array_slice($array, -1, 1)));
Small array (s): 0.00162816047668
Large array (s): 0.513121843338

Method: end($array);
Small array (s): 0.0028350353241
Large array (s): 4.81077480316
Note: Slowest...

저는 PHP 버전 5.5.32를 사용했습니다.

end()는 배열의 마지막 요소를 제공합니다.

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
echo end($array); //output: c

$array1 = array('a', 'b', 'c', 'd');
echo end($array1); //output: d

이건 어때?

에그-

$arr = [1,2,3];
$lastElem = count($arr) ? $arr[count($arr) - 1] : null;
$lastValue = end(array_values($array))

$array 포인터는 수정되지 않습니다.이렇게 하면 다음과 같은 작업을 피할 수 있습니다.

reset($array)

특정 조건에서는 바람직하지 않을 수 있습니다.

나를 위한:

$last = $array[count($array) - 1];

동료와 함께:

$last =array_values($array)[count($array - 1)]

가능한 해결책이 하나 더 있습니다...

$last_element = array_reverse( $array )[0];

어때요?

current(array_slice($array, -1))
  • 연관 배열에 사용 가능
  • 다음과 같은 경우$array == [])로 표시됩니다.false)
  • 원래 배열에 영향을 미치지 않습니다.

상위 답변은 훌륭하지만, @paul-van-leuwen과 @quasimodos-clone에서 언급했듯이, PHP 7.3은 이 문제를 직접 해결하기 위한 두 가지 새로운 함수인 array_key_first()array_key_last()를 도입할 것입니다.

오늘 다음과 같은 폴리필(또는 심) 기능을 사용하여 이 구문을 사용할 수 있습니다.

// Polyfill for array_key_last() available from PHP 7.3
if (!function_exists('array_key_last')) {
  function array_key_last($array) {
    return array_slice(array_keys($array),-1)[0];
  }
}

// Polyfill for array_key_first() available from PHP 7.3
if (!function_exists('array_key_first')) {
  function array_key_first($array) {
    return array_slice(array_keys($array),0)[0];
  }
}

// Usage examples:
$first_element_key   = array_key_first($array);
$first_element_value = $array[array_key_first($array)];

$last_element_key    = array_key_last($array);
$last_element_value  = $array[array_key_last($array)];

주의: PHP 5.4 이상이 필요합니다.

E_STRICT를 사용하지 않고 배열의 내부 포인터를 방해하지 않으려면 다음을 사용할 수 있습니다.

function lelement($array) {return end($array);}

$last_element = lelement($array);

요소는 복사본에서만 작동하므로 배열 포인터에 영향을 주지 않습니다.

배열에서 마지막 값을 가져오는 경우:

array_slice($arr,-1,1) ;

마지막 값 폼 배열을 제거하는 경우:

array_slice($arr,0,count($arr)-1) ;

다른 솔루션:

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
$lastItem = $array[(array_keys($array)[(count($array)-1)])];
echo $lastItem;

PHP 7.3 기준으로 사용 가능

$lastEl = $myArray[array_key_last($myArray)];

아래 논리를 사용하면 배열에서 마지막 요소를 쉽게 얻을 수 있습니다.

$array = array('a', 'b', 'c', 'd');
echo ($array[count($array)-1]);

마지막 요소뿐만 아니라 아래 논리를 사용하여 두 번째 마지막, 세 번째 마지막 등을 얻을 수 있습니다.

. 를 들어 다음과 같습니다. 째 번 마 지 만 요 숫 서 문 자 합 전 니 야 다 해 달 두 에 장 의 위 우 경 의 막 소 만 합 니 다 ▁for 예:
코($($array[count에array]-2];

단순:$last_element = end((array_values($array)))

어레이를 재설정하지 않고 엄격한 경고를 제공하지 않습니다.

PS. 가장 많이 투표된 답은 여전히 이중 괄호가 없기 때문에, 저는 이 답을 제출했습니다.

이는 기존의 모든 답변을 약간 개선한 것이라고 생각합니다.

$lastElement = count($array) > 0 ? array_values(array_slice($array, -1))[0] : null;
  • 다보다성우수이보다 더 잘 됩니다.end() 또는사솔루션을 한 솔루션array_keys() 대규모
  • 배열의 내부 포인터를 수정하지 않습니다.
  • 빈 배열에 대해 정의되지 않은 오프셋에 액세스하지 않음
  • 빈 어레이, 인덱스 어레이, 혼합 어레이 및 연관 어레이에서 예상대로 작동

요즘에는 php.net/end 답변에서 제안한 것처럼 항상 이 도우미가 있는 것을 선호합니다.

<?php
function endc($array) {
    return end($array);
}

$items = array('one','two','three');
$lastItem = endc($items); // three
$current = current($items); // one
?>

이것은 항상 포인터를 그대로 유지할 것이고 우리는 괄호, 엄격한 기준 등에 대해 걱정할 필요가 없을 것입니다.

참고: (PHP 7 > = 7.3.0)의 경우 array_key_last를 사용할 수 있습니다 — 배열의 마지막 키를 가져옵니다.

array_key_last ( array $array ) : mixed

참조: http://php.net/manual/en/function.array-key-last.php

여기에 있는 대부분의 솔루션은 연결되지 않은 어레이에 대해 신뢰할 수 없습니다. 마지막 요소와 연결되지 않은 어레이가 있으면false,그리고나서end그리고.current(array_slice($array, -1)) 또한돌것입니다올아다▁return▁also를 반환합니다.false그래서 우리는 사용할 수 없습니다.false연결되지 않은 빈 배열의 표시자로 사용됩니다.

// end returns false form empty arrays
>>> $arr = []
>>> end($arr)
=> false

// last element is false, so end returns false,
// now we'll have a false possitive that the array is empty
>>> $arr = [1, 2, 3, false]
>>> end($arr)
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> end($arr)
=> 4

그것도 마찬가지입니다.current(array_slice($arr, -1)):

// returns false form empty arrays
>>> $arr = []
>>> current(array_slice($arr, -1))
=> false

// returns false if last element is false
>>> $arr = [1, 2, 3, false]
>>> current(array_slice($arr, -1))
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> current(array_slice($arr, -1))
=> 4

가장 좋은 옵션은 다음에 사용할 수 있는 것입니다.PHP >= 7.3.0버전의 에는 또는이버경우는에의전을 사용합니다.count마지막 인덱스를 가져오려면(연결되지 않은 어레이의 경우에만 해당)

// returns null for empty arrays
>>> $arr = []
>>> array_key_last($arr)
=> null

// returns last index of the array
>>> $arr = [1, 2, 3, false]
>>> array_key_last($arr)
=> 3

// returns last index of the array
>>> $arr = [1, 2, 3, false, 4]
>>> array_key_last($arr)
=> 4

이전 버전의 경우 다음을 사용할 수 있습니다.count:

>>> $arr = []
>>> if (count($arr) > 0) $arr[count($arr) - 1]
// No excecution

>>> $arr = [1, 2, 3, false]
>>> if (count($arr) > 0) $arr[count($arr) - 1]
=> false

>>> $arr = [1, 2, 3, false, 4]
>>> if (count($arr) > 0) $arr[count($arr) - 1]
=> 4

이상으로 연결되지 않은 어레이에 대해 설명합니다.배열이 있는 하다면 연된어가있는것확이다수사있다습니용음할을결면을 사용할 수 .end.

어레이의 루프 안에 어레이의 마지막 요소를 넣고 싶다면 어떻게 해야 합니까?

아래 코드는 무한 루프로 이어집니다.

foreach ($array as $item) {
 $last_element = end($array);
 reset($array);
 if ($last_element == $item) {
   // something useful here
 }
}

이 솔루션은 비연관적 어레이에 대해 매우 간단합니다.

$last_element = $array[sizeof ($array) - 1];
foreach ($array as $key => $item) {
 if ($last_element == $item) {
   // something useful here
 }
}
$file_name_dm =  $_FILES["video"]["name"];    

                           $ext_thumb = extension($file_name_dm);

                            echo extension($file_name_dm); 
function extension($str){
    $str=implode("",explode("\\",$str));
    $str=explode(".",$str);
    $str=strtolower(end($str));
     return $str;
}

end() 함수를 사용합니다.

$array = [1,2,3,4,5];
$last = end($array); // 5

언급URL : https://stackoverflow.com/questions/3687358/how-to-get-the-last-element-of-an-array-without-deleting-it

반응형