Jeśli nie wiesz wystarczająco dużo o tablicy (nie jesteś pewien, czy pierwszy klucz to foo czy bar ), to tablica może być również pusta .
Dlatego najlepiej byłoby to sprawdzić, zwłaszcza jeśli istnieje szansa, że zwrócona wartość może być logiczną FAŁSZ:
$value = empty($arr)? $default : reset($arr);
Powyższy kod używa reseti ma efekty uboczne (resetuje wewnętrzny wskaźnik tablicy), więc możesz preferować użycie array_slicedo szybkiego dostępu do kopii pierwszego elementu tablicy:
Jeśli tablica nie jest naprawdę duża, w rzeczywistości nie potrzebujesz array_slicei możesz raczej uzyskać kopię całej tablicy kluczy, a następnie uzyskać pierwszy element:
$key = count($arr)? array_keys($arr)[0]:null;
Jeśli jednak masz bardzo dużą tablicę, wywołanie array_keysbędzie wymagało znacznie więcej czasu i pamięci array_slice(obie funkcje przechodzą przez tablicę, ale ta ostatnia kończy się, gdy tylko zgromadzi wymaganą liczbę elementów - czyli jeden).
Godnym uwagi wyjątkiem jest sytuacja, w której masz pierwszy klucz, który wskazuje na bardzo duży i zawiły obiekt. W takim przypadku array_slicezduplikuje ten pierwszy duży obiekt, a array_keysjedynie złapie klucze.
PHP 7.3.0
PHP 7.3 implementuje array_key_first()równieżarray_key_last() . Są one jawnie udostępniane w celu wydajnego uzyskiwania dostępu do pierwszego i ostatniego klucza bez resetowania stanu wewnętrznego tablicy jako efektu ubocznego.
Więc w PHP 7.3 pierwsza wartość z $arraymoże być dostępne z
$array[array_key_first($array)];
Nadal lepiej sprawdź, czy tablica nie jest pusta, bo inaczej otrzymasz błąd:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer cóż, druga odpowiedź jest nie tylko zaakceptowana, ale jest tam jeszcze osiem lat . W pewnym sensie zbieram tu okruchy :-D. Ale dzięki za wotum zaufania!
LSerni
1
Wydaje mi się, że jest to najlepsza odpowiedź, ponieważ jedyną inną, która nie jest przestarzała, która podaje zarówno klucz, jak i wartość, jest przerwana pętla foreach, co jest niezręczne. Pozostałe odpowiedzi podają tylko wartość bez klucza.
sootsnoot
1
uwielbiałem to i nowoczesne podejście, aktualizowane z czasem.
sanjeet bisht
@LSerni Nie wiem, czy nadal jesteś aktywny, ale utknąłem i ten dobrze wyjaśniony i zaktualizowany post mnie uratował. Dziękuję
izk
@izk Jestem zawsze aktywny! :-D
LSerni
44
Fałszywa pętla, która zrywa się przy pierwszej iteracji:
Prawdopodobnie dlatego, że reset () jest prostszy.
mjs
1
Ponieważ rozwiązanie znajduje się w pierwszej linii kodu, ale kontynuujesz pisanie innej, całkowicie niepotrzebnej linii.
markus
21
reset nie zwróci klucza
HarryFink
3
+1 za „fałszywą pętlę”. Musiałem pobrać klucz i wartość pierwszego elementu, nie przechodząc przez każdy element. reset()Funkcja będzie pobierać tylko pierwszą wartość.
Phil Cross,
2
+1 również dla fałszywej pętli, muszę zachować klucz, więc reset nie był opcją
isJustMe
25
Jest kilka opcji. array_shift()zwróci pierwszy element, ale usunie również pierwszy element z tablicy.
$first = array_shift($array);
current() zwróci wartość tablicy, na którą wskazuje wskaźnik pamięci wewnętrznej, która jest domyślnie pierwszym elementem.
$first = current($array);
Jeśli chcesz mieć pewność, że wskazuje na pierwszy element, zawsze możesz użyć reset().
Podoba mi się ta odpowiedź jako najbardziej kompletna, ale uwaga w reset()rzeczywistości zwraca element, więc śledzenie tego z a $first = current($array)jest zbędne.
Tom Auger,
9
Po prostu mamy kilka innych opcji: reset($arr);wystarczająco dobre, jeśli nie próbujesz utrzymać wskaźnika tablicy w miejscu, a przy bardzo dużych tablicach powoduje to minimalne obciążenie. To powiedziawszy, są z tym pewne problemy:
reset()jest znacznie lepszą opcją, ponieważ zwraca wartość false, jeśli tablica jest pusta. Twoje rozwiązanie nie zadziała na przykład w pytaniu
Northys
1
W PHP 7+ działałoby coś takiego:array_values($array)[0] ?? FALSE
MarthyM
4
Sprawdź, czy zmienna a jest tablicą przed uzyskaniem pierwszego elementu. Podczas dynamicznego tworzenia tablicy, jeśli ma ona wartość null, pojawia się błąd.
Działa to tylko wtedy, gdy wewnętrzny wskaźnik znajduje się na pierwszym elemencie. Chociaż jest to dobre, ponieważ nie resetuje położenia wskaźnika, działa tylko wtedy, gdy wskaźnik jest już w spoczynku.
cjc
1
Począwszy od PHP 7.3.0 można to zrobić bez resetowania wewnętrznego wskaźnika. Użyłbyś array_key_first. Jeśli jesteś pewien, że twoja tablica ma wartości, możesz po prostu zrobić:
$first = $array[array_key_first($array)];
Bardziej prawdopodobne jest, że będziesz chciał obsłużyć przypadek, w którym tablica jest pusta:
Odpowiedzi:
reset()
podaje pierwszą wartość tablicy, jeśli wewnątrz tablicy znajduje się element:Podaje również
FALSE
w przypadku, gdy tablica jest pusta.źródło
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7.3.0
Jeśli nie wiesz wystarczająco dużo o tablicy (nie jesteś pewien, czy pierwszy klucz to foo czy bar ), to tablica może być również pusta .
Dlatego najlepiej byłoby to sprawdzić, zwłaszcza jeśli istnieje szansa, że zwrócona wartość może być logiczną FAŁSZ:
Powyższy kod używa
reset
i ma efekty uboczne (resetuje wewnętrzny wskaźnik tablicy), więc możesz preferować użyciearray_slice
do szybkiego dostępu do kopii pierwszego elementu tablicy:Zakładając, że chcesz uzyskać osobno klucz i wartość , musisz dodać czwarty parametr do
array_slice
:Aby otrzymać pierwszą pozycję jako parę (
key => value
):Prosta modyfikacja, aby uzyskać osobno ostatni element, klucz i wartość:
występ
Jeśli tablica nie jest naprawdę duża, w rzeczywistości nie potrzebujesz
array_slice
i możesz raczej uzyskać kopię całej tablicy kluczy, a następnie uzyskać pierwszy element:Jeśli jednak masz bardzo dużą tablicę, wywołanie
array_keys
będzie wymagało znacznie więcej czasu i pamięciarray_slice
(obie funkcje przechodzą przez tablicę, ale ta ostatnia kończy się, gdy tylko zgromadzi wymaganą liczbę elementów - czyli jeden).Godnym uwagi wyjątkiem jest sytuacja, w której masz pierwszy klucz, który wskazuje na bardzo duży i zawiły obiekt. W takim przypadku
array_slice
zduplikuje ten pierwszy duży obiekt, aarray_keys
jedynie złapie klucze.PHP 7.3.0
PHP 7.3 implementuje
array_key_first()
równieżarray_key_last()
. Są one jawnie udostępniane w celu wydajnego uzyskiwania dostępu do pierwszego i ostatniego klucza bez resetowania stanu wewnętrznego tablicy jako efektu ubocznego.Więc w PHP 7.3 pierwsza wartość z
$array
może być dostępne zNadal lepiej sprawdź, czy tablica nie jest pusta, bo inaczej otrzymasz błąd:
źródło
Fałszywa pętla, która zrywa się przy pierwszej iteracji:
Lub użyj
each()
( ostrzeżenie: przestarzałe w PHP 7.2.0 ):źródło
reset()
Funkcja będzie pobierać tylko pierwszą wartość.Jest kilka opcji.
array_shift()
zwróci pierwszy element, ale usunie również pierwszy element z tablicy.current()
zwróci wartość tablicy, na którą wskazuje wskaźnik pamięci wewnętrznej, która jest domyślnie pierwszym elementem.Jeśli chcesz mieć pewność, że wskazuje na pierwszy element, zawsze możesz użyć
reset()
.źródło
reset()
rzeczywistości zwraca element, więc śledzenie tego z a$first = current($array)
jest zbędne.Po prostu mamy kilka innych opcji:
reset($arr);
wystarczająco dobre, jeśli nie próbujesz utrzymać wskaźnika tablicy w miejscu, a przy bardzo dużych tablicach powoduje to minimalne obciążenie. To powiedziawszy, są z tym pewne problemy:Sposób na zrobienie tego bez zmiany wskaźnika:
Zaletą
$arr[reset(array_keys($arr))];
jest to, że generuje ostrzeżenie, jeśli tablica jest rzeczywiście pusta.źródło
inny łatwy i prosty sposób, aby to zrobić, użyj wartości_tablicowych
źródło
reset()
jest znacznie lepszą opcją, ponieważ zwraca wartość false, jeśli tablica jest pusta. Twoje rozwiązanie nie zadziała na przykład w pytaniuarray_values($array)[0] ?? FALSE
Sprawdź, czy zmienna a jest tablicą przed uzyskaniem pierwszego elementu. Podczas dynamicznego tworzenia tablicy, jeśli ma ona wartość null, pojawia się błąd.
Na przykład:
źródło
Możemy zrobić
$first = reset($array);
Zamiast
Tak jak
reset()
zwraca pierwszy element tablicy po resecie;
źródło
Możesz zrobić:
źródło
Użyj funkcji reset (), aby pobrać pierwszy element z tej tablicy bez znajomości klucza do niej w ten sposób.
wyjście // 400
źródło
Możesz tego spróbować.
Aby uzyskać pierwszą wartość tablicy: -
Aby uzyskać pierwszy klucz tablicy
źródło
Możesz użyć array_shift
źródło
Robię to, aby uzyskać pierwszą i ostatnią wartość. Działa to również z większą liczbą wartości.
źródło
Począwszy od PHP 7.3.0 można to zrobić bez resetowania wewnętrznego wskaźnika. Użyłbyś
array_key_first
. Jeśli jesteś pewien, że twoja tablica ma wartości, możesz po prostu zrobić:Bardziej prawdopodobne jest, że będziesz chciał obsłużyć przypadek, w którym tablica jest pusta:
źródło
możesz po prostu użyć
$array[0]
. zawsze da ci pierwszy przedmiotźródło