Pobierz pierwszy element tablicy
Mam tablicę:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
Chciałbym otrzymać pierwszy element tej tablicy. Oczekiwany wynik: string apple
Jeden wymóg: nie można tego zrobić z przekazaniem przez odniesienie , więc array_shift
nie jest dobrym rozwiązaniem.
30 answers
Oryginalna odpowiedź, ale kosztowna (O (n)):
array_shift(array_values($array));
W O (1):
array_pop(array_reverse($array));
Edytowane z sugestiami z komentarzy do innych przypadków użycia itp...
Jeśli modyfikowanie (w sensie resetowania wskaźników tablicy) $array
nie jest problemem, możesz użyć:
reset($array);
Teoretycznie powinno to być bardziej efektywne, jeśli potrzebna jest tablica "Kopia":
array_shift(array_slice($array, 0, 1));
Z PHP 5.4+ (ale może spowodować błąd indeksu, jeśli jest pusty):
array_values($array)[0];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 12:28:59
Jak zauważył Mike (najprostszy możliwy sposób):
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); //echoes "apple"
Jeśli chcesz uzyskać klucz: (wykonaj go po resecie)
echo key($arr); //echoes "4"
Z dokumentacji PHP :
mieszane reset (array & $array );
Opis:
Reset () przewija wewnętrzny wskaźnik tablicy do pierwszego elementu i zwraca wartość pierwszego elementu tablicy lub FALSE, jeśli tablica jest pusty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 03:05:56
$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key
Mam nadzieję, że to pomoże. :)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-08 06:01:49
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'
Jeśli nie chcesz stracić bieżącej pozycji wskaźnika, po prostu utwórz alias dla tablicy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 19:18:23
Można uzyskać n-ty element z konstrukcją językową "list":
// 1st item
list($firstItem) = $yourArray;
// 1st item from an array that is returned from function
list($firstItem) = functionThatReturnsArray();
// 2nd item
list( , $secondItem) = $yourArray;
Z funkcją array_keys możesz zrobić to samo dla kluczy:
list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-12 13:50:40
current($array)
Może uzyskać pierwszy element tablicy, zgodnie z podręcznikiem PHP
Każda tablica ma wewnętrzny wskaźnik do swojego "bieżącego" elementu, który jest inicjowany do pierwszego elementu włożonego do tablicy.
Więc działa, dopóki nie ustawisz wskaźnika tablicy, w przeciwnym razie będziesz musiał zresetować tablicę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 12:31:30
PHP 5.4+:
array_values($array)[0];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 17:48:29
Przypuśćmy:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
Po prostu użyj:
$array[key($array)]
Aby uzyskać pierwszy element lub
key($array)
Aby uzyskać pierwszy klucz.
Lub możesz odłączyć pierwszy, jeśli chcesz go usunąć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 12:32:47
Niektóre tablice nie działają z takimi funkcjami jak list
, reset
lub current
. Być może są to" fałszywe " tablice-częściowo implementujące ArrayIterator, na przykład.
Jeśli chcesz wyciągnąć pierwszą wartość niezależnie od tablicy, możesz zwarć iterator:
foreach($array_with_unknown_keys as $value) break;
Twoja wartość będzie dostępna w $value
i pętla zostanie przerwana po pierwszej iteracji. Jest to bardziej wydajne niż kopiowanie potencjalnie dużej tablicy do funkcji takiej jak array_unshift (array_values ($arr)).
Możesz też chwycić klucz w ten sposób:
foreach($array_with_unknown_keys as $key=>$value) break;
Jeśli wywołujesz to z funkcji, po prostu wróć wcześniej:
function grab_first($arr) {
foreach($arr as $value) return $value;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-22 20:41:15
Po prostu zrób:
array_shift(array_slice($array,0,1));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 11:19:46
Zrobiłbym echo current($array)
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 12:40:26
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;
Wyjście:
apple
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-06 05:01:49
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$firstValue = each($array)[1];
Jest to znacznie wydajniejsze niż array_values()
, Ponieważ funkcja each()
nie kopiuje całej tablicy.
Aby uzyskać więcej informacji zobacz http://www.php.net/manual/en/function.each.php
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-17 16:35:59
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);
// the first element of your array is:
echo $myArray[$arrayKeys[0]];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 19:48:30
function head($array)
{
return reset($array);
}
Tablica przekazywana przez wartość do funkcji, reset () wpływa na wewnętrzny wskaźnik kopii tablicy, nie dotyka oryginalnej tablicy. (Uwaga zwraca false
jeśli tablica jest pusta)
Przykład użycia:
$data = ['foo', 'bar', 'baz'];
current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz
również tutaj jest alternatywa. Jest to bardzo marginalnie szybsze, ale ciekawsze, pozwala łatwo zmienić wartość domyślną, jeśli tablica jest pusta:
function head($array, $default = null)
{
foreach ($array as $item) {
return $item;
}
return $default;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 13:24:48
Kludny sposób to:
$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
function get_first ($foo) {
foreach ($foo as $k=>$v){
return $v;
}
}
print get_first($foo);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 08:13:15
Keep this simple! Wiele poprawnych odpowiedzi tutaj, ale aby zminimalizować wszystkie zamieszanie. Te dwie prace i zmniejszyć dużo kosztów.
key($array)
= pobiera pierwszy klucz tablicycurrent($array)
= pobiera pierwszą wartość tablicy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-23 20:35:16
Get first element:
array_values($arr)[0]
Get last element
array_reverse($arr)[0]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 11:25:02
Większość z nich działa! Ale dla szybkiego wywołania pojedynczej linii (niski zasób):
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];
// key($array) -> will return the first key (which is 4 in this example)
Chociaż to działa, i przyzwoicie dobrze, proszę również zobaczyć moją dodatkową odpowiedź: https://stackoverflow.com/a/48410351/1804013
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 08:24:10
Myślę, że użycie array_values byłoby najlepszym rozwiązaniem tutaj. Możesz zwrócić wartość o indeksie zerowym z wyniku tej funkcji, aby uzyskać 'apple'.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-17 13:23:12
Użycie:
$first = array_slice($array, 0, 1);
$val= $first[0];
Domyślnie array_slice
nie zachowuje kluczy, więc możemy bezpiecznie używać zera jako indeksu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 11:20:43
PHP 7.3 dodano dwie funkcje do pobierania pierwszego i ostatniego klucza tablicy bezpośrednio bez modyfikacji oryginalnej tablicy i bez tworzenia żadnych tymczasowych obiektów:
Poza znaczeniem semantycznym, funkcje te nawet nie przesuwają wskaźnika tablicy (tak jak zrobiłby to foreach
).
Mając klucze, można uzyskać wartości przez klucze bezpośrednio.
W tym celu należy użyć PHP 7.3+.]}
Uzyskanie pierwszego / ostatniego klucza i wartości:
$my_array = ['IT', 'rules', 'the', 'world'];
$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];
$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];
Uzyskanie pierwszej / ostatniej wartości jako Jednowierszowe, zakładając, że tablica nie może być pusta :
$first_value = $my_array[ array_key_first($my_array) ];
$last_value = $my_array[ array_key_last($my_array) ];
Uzyskanie pierwszej / ostatniej wartości jako jednowierszowej, z domyślnymi wartościami dla pustych tablic:
$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];
$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 13:52:01
Jest to trochę za późno na grę, ale pojawił się problem, w którym moja tablica zawierała elementy tablicy jako dzieci w środku, a więc nie mogłem po prostu uzyskać ciągowej reprezentacji pierwszego elementu tablicy. Przez używając funkcji PHP current()
udało mi się:
<?php
$original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
reset($original); // to reset the internal array pointer...
$first_element = current($original); // get the current element...
?>
Dzięki wszystkim obecnym rozwiązaniom pomógł mi dostać się do tej odpowiedzi, mam nadzieję, że to pomoże komuś kiedyś!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-20 11:48:49
Dwa rozwiązania dla Ciebie.
Rozwiązanie 1-Wystarczy użyć klucza. Nie powiedziałeś, że nie możesz z niego korzystać. :)
<?php
// get first element of this array.
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
// gets the first element by key
$result = $array[4];
//Expected result: string apple
assert('$result === "apple" /* Expected result: string apple. */');
?>
Rozwiązanie 2-array_flip () + key ()
<?php
// get first element of this array. Expected result: string apple
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
// turn values to keys
$array = array_flip($array);
// you might, thrown an reset in
// just to make sure that the array pointer is at first element
// also reset return the first element
// reset($myArray);
// return first key
$firstKey = key($array);
assert('$firstKey === "apple" /* Expected result: string apple. */');
?>
Rozwiązanie 3-array_keys ()
echo $array[array_keys($array)[0]];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 20:23:51
To nie jest tak prosta odpowiedź w realnym świecie. Supost, że mamy to przykłady możliwych odpowiedzi, które można znaleźć w niektórych bibliotekach.
$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;
var_dump( 'reset1', reset($array1) );
var_dump( 'reset2', reset($array2) );
var_dump( 'reset3', reset($array3) );
var_dump( 'reset4', reset($array4) ); // warning
var_dump( 'array_shift1', array_shift($array1) );
var_dump( 'array_shift2', array_shift($array2) );
var_dump( 'array_shift3', array_shift($array3) );
var_dump( 'array_shift4', array_shift($array4) ); // warning
var_dump( 'each1', each($array1) );
var_dump( 'each2', each($array2) );
var_dump( 'each3', each($array3) );
var_dump( 'each4', each($array4) ); // warning
var_dump( 'array_values1', array_values($array1)[0] ); // Notice
var_dump( 'array_values2', array_values($array2)[0] );
var_dump( 'array_values3', array_values($array3)[0] );
var_dump( 'array_values4', array_values($array4)[0] ); // warning
var_dump( 'array_slice1', array_slice($array1, 0, 1) );
var_dump( 'array_slice2', array_slice($array2, 0, 1) );
var_dump( 'array_slice3', array_slice($array3, 0, 1) );
var_dump( 'array_slice4', array_slice($array4, 0, 1) ); // warning
list($elm) = $array1; //Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);
Jak widzisz, mamy kilka rozwiązań "jednej linii", które w niektórych przypadkach działają dobrze, ale nie we wszystkich.
Moim zdaniem powinieneś mieć ten handler tylko z tablicami.
Teraz mówiąc o wydajności, zakładając, że zawsze mamy tablicę, TAK:
$elm = empty($array)? null : ...($array);
...you would use without errors:
$array[count($array)-1] ;
array_shift
reset
array_values
array_slice
Array_shift jest szybszy niż reset, czyli bardziej fast that [count () -1] and this three are more fast that array_values and array_slice
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 18:18:07
Podoba mi się przykład "lista", ale "lista" działa tylko po lewej stronie zadania. Jeśli nie chcemy przypisywać zmiennej, będziemy zmuszeni stworzyć tymczasową nazwę, która w najlepszym przypadku zanieczyszcza nasz zakres, a w najgorszym nadpisuje istniejącą wartość:
list($x) = some_array();
var_dump($x);
Powyższe nadpisze dowolną istniejącą wartość $x, a zmienna $x będzie wisiała tak długo, jak ten zakres jest aktywny (koniec tej funkcji / metody lub na zawsze, jeśli jesteśmy na najwyższym poziomie). Można to obejść używanie call_user_func i funkcji anonimowej, ale jest niezgrabne:
var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
some_array()));
Jeśli używamy funkcji anonimowych, takich jak ta, możemy rzeczywiście uciec z reset i array_shift, nawet jeśli używają pass-by-reference. Dzieje się tak, ponieważ wywołanie funkcji wiąże jej argumenty, a te argumenty mogą być przekazywane przez odwołanie:
var_dump(call_user_func(function($arr) { return reset($arr); },
array_values(some_array())));
Jest to jednak w rzeczywistości przesada, ponieważ call_user_func wykona to tymczasowe przypisanie wewnętrznie. To pozwala nam traktować funkcje pass-by-reference jakby były przechodnie, bez żadnych ostrzeżeń i błędów:
var_dump(call_user_func('reset', array_values(some_array())));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 16:32:11
Warto również pamiętać o kontekście, w którym to robisz, ponieważ wyczerpująca kontrola może być kosztowna i nie zawsze konieczna.
Na przykład To rozwiązanie działa dobrze w sytuacji, w której go używam (ale oczywiście nie można na nim polegać we wszystkich przypadkach...)
/**
* A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
* <br/>
* 1) All the keys are strings - i.e. associative<br/>
* or<br/>
* 2) All the keys are numeric - i.e. not associative<br/>
*
* @param array $objects
* @return boolean
*/
private function isAssociativeArray(array $objects)
{
// This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
// which we're using it.
reset($objects);
return count($objects) > 0 && is_string(key($objects));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 15:46:03
Mała zmiana tego, co napisał Sarfraz:
$array = array(1, 2, 3, 4, 5);
$output = array_slice($array, 0, 1);
print_r ($output);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-12 08:13:37
Stary post, ale w każdym razie... Domyślam się, że autor szukał sposobu na uzyskanie pierwszego elementu tablicy po pobraniu go z jakiejś funkcji (na przykład mysql_fetch_row) bez generowania ścisłego "tylko zmienne powinny być przekazywane przez odniesienie". Jeśli tak, to prawie wszystkie opisane tutaj sposoby otrzymają tę wiadomość... a niektóre z nich wykorzystują dużo dodatkowej pamięci duplikującej tablicę (lub jej część). Łatwym sposobem na uniknięcie tego jest przypisanie wartości inline przed wywołaniem któregokolwiek z tych funkcje:
$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());
W ten sposób nie otrzymasz ścisłego komunikatu na ekranie ani w logach i nie utworzysz żadnych dodatkowych tablic. Działa z tablicami zarówno indeksowanymi, jak i asocjacyjnymi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 08:50:06
Nie lubię manipulować wewnętrznym wskaźnikiem tablicy, ale nieefektywne jest również budowanie drugiej tablicy z array_keys()
lub array_values()
, więc zwykle definiuję to:
function array_first(array $f) {
foreach ($f as $v) {
return $v;
}
throw new Exception('array was empty');
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 01:55:14