연관 PHP 배열에서 첫 번째 항목을 얻는 방법은 무엇입니까?


146

내가 같은 배열을 가지고 있다면 :

$array['foo'] = 400;
$array['bar'] = 'xyz';

그리고 키를 모른 채 배열에서 첫 번째 항목을 가져오고 싶습니다. 어떻게해야합니까? 이것에 대한 기능이 있습니까?


답변:



51

PHP <7.3

배열에 대해 충분히 모른다면 (첫 번째 키가 foo 인지 bar 인지 확실하지 않은 경우) 배열도 비어 있을 수 있습니다. .

따라서 반환 된 값이 부울 FALSE 일 가능성이있는 경우 특히 확인하는 것이 가장 좋습니다.

$value = empty($arr) ? $default : reset($arr);

위의 코드의 사용 reset등은 부작용을 가지고 사용을 선호 할 수 있도록 (이 배열의 내부 포인터를 재설정) array_slice신속하게 배열의 첫 번째 요소의 사본을 액세스 할 수 :

$value = $default;
foreach(array_slice($arr, 0, 1) as $value);

키와 값을 별도로 가져 오려면 다음에 네 번째 매개 변수를 추가해야합니다 array_slice.

foreach(array_slice($arr, 0, 1, true) as $key => $value);

첫 번째 항목 을 한 쌍으로 가져 오려면 ( key => value) :

$item = array_slice($arr, 0, 1, true);

마지막 항목, 키 및 값을 별도로 가져 오는 간단한 수정 :

foreach(array_slice($arr, -1, 1, true) as $key => $value);

공연

배열이 실제로 크지 않은 경우 실제로 array_slice전체 키 배열의 사본을 필요로하지 않고 오히려 첫 번째 항목을 얻을 수 있습니다.

$key = count($arr) ? array_keys($arr)[0] : null;

그러나 배열이 매우 큰 경우 호출에 array_keys많은 시간과 메모리가 필요합니다 array_slice(두 함수 모두 배열을 따라 가지만 필요한 수의 항목을 수집하자마자 종료됩니다).

주목할만한 예외는 매우 크고 복잡한 객체를 가리키는 첫 번째 키가있는 경우입니다. 이 경우 array_slice첫 번째 큰 객체를 복제 array_keys하고 키만 가져옵니다.

PHP 7.3

PHP 7.3 array_key_first()은 물론 구현array_key_last() 합니다. 이는 어레이의 내부 상태를 부작용으로 재설정하지 않고 첫 번째 키와 마지막 키에 효율적으로 액세스 할 수 있도록 명시 적으로 제공됩니다.

그래서 PHP 7.3의 첫 번째 의은 $array에 액세스 할 수 있습니다

$array[array_key_first($array)];

그래도 배열이 비어 있지 않은지 확인하는 것이 좋습니다. 그렇지 않으면 오류가 발생합니다.

$firstKey = array_key_first($array);
if (null === $firstKey) {
    $value = "Array is empty"; // An error should be handled here
} else {
    $value = $array[$firstKey];
}

@ AhmedShefeer 잘, 다른 대답은 받아 들일 뿐만 아니라 거기에있었습니다. 8 년 더 있었습니다 . 나는 부스러기를 집어 들고 있습니다 :-D. 그러나 자신감에 감사드립니다!
LSerni

1
키와 값을 모두 제공하는 더 이상 사용되지 않는 다른 하나는 중단 된 foreach 루프이기 때문에 이것이 가장 좋은 대답 인 것처럼 보입니다. 다른 답변은 키가없는 값만 제공합니다.
sootsnoot

1
이 ans, 현대적인 접근 방식을 좋아하고 시간이 지남에 따라 업데이트되었습니다.
sanjeet bisht

@LSerni 당신이 아직 활동하고 있는지 모르겠지만, 나는 붙어 있었고이 잘 설명되고 업데이트 된 게시물이 저를 구했습니다. 감사합니다
izk

@izk 나는 항상 활동적입니다! :-D
LSerni

44

첫 번째 반복에서 중단되는 가짜 루프 :

$key = $value = NULL;
foreach ($array as $key => $value) {
    break;
}

echo "$key = $value\n";

또는 each()( 경고 : PHP 7.2.0부터 더 이상 사용되지 않음 ) :

reset($array);
list($key, $value) = each($array);

echo "$key = $value\n";

2
아마도 reset ()이 더 간단하기 때문일 것입니다.
mjs

1
솔루션이 첫 번째 코드 줄에 있지만 완전히 불필요한 다른 줄을 계속 쓰고 있기 때문입니다.
markus

21
재설정 키를 반환하지 않습니다
HarryFink

3
'가짜 루프'의 경우 +1 각 요소를 거치지 않고 첫 번째 요소 키와 값을 검색해야했습니다. 이 reset()함수는 첫 번째 값만 검색합니다.
Phil Cross

2
가짜 루프에 대해서도 +1입니다. 재설정이 옵션이 아니 었으므로 키를 유지해야합니다
isJustMe

25

몇 가지 옵션이 있습니다. array_shift()첫 번째 요소를 반환하지만 배열에서 첫 번째 요소도 제거합니다.

$first = array_shift($array);

current() 내부 메모리 포인터가 가리키는 배열의 값을 반환합니다. 이것은 기본적으로 첫 번째 요소입니다.

$first = current($array);

첫 번째 요소를 가리키는 지 확인하려면 항상을 사용할 수 있습니다 reset().

reset($array);
$first = current($array);

3
나는이 답변이 가장 완전한 것을 좋아하지만 reset()실제로는 요소를 반환하므로 a를 사용하면 그 뒤에 $first = current($array)중복 되는 요소 가됩니다.
Tom Auger

9

그냥 그래서 우리는 몇 가지 다른 옵션을 가지고 : reset($arr);당신이 매우 큰 배열을하고, 장소에 배열 포인터를 유지하려고하지 않는 경우 충분한 그것을 오버 헤드의 최소 금액을 초래한다. 그러나 몇 가지 문제가 있습니다.

$arr = array(1,2);
current($arr); // 1
next($arr);    // 2
current($arr); // 2
reset($arr);   // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.

포인터를 변경하지 않고이 작업을 수행하는 방법 :

$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));

$arr[reset(array_keys($arr))];배열이 실제로 비어 있으면 경고가 발생한다는 이점이 있습니다.


매우 설명적인 답변이며 다른 사람들에게 많은 의미가 있습니다. 고마워요
Jigar7521

7

array_values를 사용하는 또 다른 쉽고 간단한 방법

array_values($array)[0]

reset()배열이 비어 있으면 false를 반환하기 때문에 훨씬 좋은 옵션입니다. 솔루션 질문에 예를 들어 작동하지 않습니다
Northys

1
PHP 7 이상에서는 다음과 같이 작동합니다.array_values($array)[0] ?? FALSE
MarthyM

4

첫 번째 요소를 얻기 전에 변수가 배열인지 테스트하십시오. 배열을 null로 설정하면 동적으로 배열을 만들 때 오류가 발생합니다.

예를 들어 :

if(is_array($array))
{
  reset($array);
  $first = key($array);
}

3

우린 할 수있어 $first = reset($array);

대신에

reset($array);
$first = current($array);

같이 reset()

재설정 후 배열의 첫 번째 요소를 반환합니다.


2

당신은 할 수 있습니다:

$values = array_values($array);
echo $values[0];

2

reset () 함수를 사용하여 이와 같은 키를 몰라도 해당 배열에서 첫 번째 항목을 가져옵니다.

$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);

출력 // 400


2

당신은 이것을 시도 할 수 있습니다.

배열의 첫 번째 값을 얻으려면 :-

<?php
   $large_array = array('foo' => 'bar', 'hello' => 'world');
   var_dump(current($large_array));
?>

배열의 첫 번째 키를 얻으려면

<?php
   $large_array = array('foo' => 'bar', 'hello' => 'world');
   $large_array_keys = array_keys($large_array);
   var_dump(array_shift($large_array_keys));
?>


1

첫 번째와 마지막 값을 얻기 위해이 작업을 수행합니다. 이것은 더 많은 값으로도 작동합니다.

$a = array(
    'foo' => 400,
    'bar' => 'xyz',
);
$first = current($a);   //400
$last = end($a);    //xyz

내부 포인터가 첫 번째 요소에있을 때만 작동합니다. 이것은 포인터의 위치를 ​​재설정하지 않기 때문에 좋지만 포인터가 이미 놓여있을 때만 작동합니다.
cjc

1

PHP 7.3.0 부터는 내부 포인터를 재설정하지 않고도 할 수 있습니다. 을 사용 array_key_first합니다. 배열에 값이 있다고 확신하면 다음을 수행 할 수 있습니다.

$first = $array[array_key_first($array)];

아마도 배열이 비어있는 경우를 처리하고 싶을 것입니다.

$first = (empty($array)) ? $default : $array[array_key_first($array)];

-3

당신은 사용할 수 있습니다 $array[0]. 항상 첫 번째 항목을 제공합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.