Se você não souber o suficiente sobre a matriz (não tem certeza se a primeira chave é foo ou bar ), a matriz também pode estar vazia .
Portanto, seria melhor verificar, especialmente se houver a chance de o valor retornado ser o booleano FALSE:
$value = empty($arr)? $default : reset($arr);
O código acima usa resete, portanto, tem efeitos colaterais (redefine o ponteiro interno da matriz); portanto, você pode preferir usar array_slicepara acessar rapidamente uma cópia do primeiro elemento da matriz:
Se a matriz não for realmente grande, você realmente não precisa array_slicee pode obter uma cópia de toda a matriz de chaves e obter o primeiro item:
$key = count($arr)? array_keys($arr)[0]:null;
Porém, se você tiver uma matriz muito grande, a chamada array_keysexigirá mais tempo e memória do que array_slice(ambas as funções percorrem a matriz, mas a última termina assim que reunir o número necessário de itens - que é um).
Uma exceção notável é quando você tem a primeira chave que aponta para um objeto muito grande e complicado. Nesse caso array_sliceirá duplicar esse primeiro objeto grande, enquanto array_keyssó vai pegar as chaves.
PHP 7.3
Implementa o PHP 7.3 array_key_first()e também array_key_last(). Elas são fornecidas explicitamente para acessar a primeira e a última chave com eficiência, sem redefinir o estado interno da matriz como efeito colateral.
Portanto, no PHP 7.3, o primeiro valor de $arraypode ser acessado com
$array[array_key_first($array)];
Você ainda deve verificar se a matriz não está vazia, ou você receberá um erro:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer bem, a outra resposta não é apenas a aceita, mas existe há mais oito anos . Estou pegando as migalhas aqui :-D. Mas obrigado pelo voto de confiança!
LSerni
1
Parece-me que esta é a melhor resposta, já que a única não preterida que fornece a chave e o valor é o loop foreach anulado, o que é estranho. As outras respostas fornecem apenas o valor sem a chave.
sootsnoot
1
adorei essa abordagem moderna e atualizada com o tempo.
sanjeet bisht 20/01/19
@LSerni Não sei se você ainda está ativo, mas eu estava preso e esse post bem explicado e atualizado me salvou. Obrigado
Porque a solução está na sua primeira linha de código, mas você continua escrevendo outra linha completamente desnecessária.
Markus
21
redefinição de rotina voltar a chave
HarryFink
3
+1 para o "loop falso". Eu precisei recuperar a chave e o valor dos primeiros elementos, sem passar por cada elemento. A reset()função recuperaria apenas o primeiro valor.
Phil Cross
2
+1 para o loop falso, bem, eu preciso manteve a chave para redefinir não era uma opção
isJustMe
25
Existem algumas opções. array_shift()retornará o primeiro elemento, mas também removerá o primeiro elemento da matriz.
$first = array_shift($array);
current() retornará o valor da matriz que seu ponteiro de memória interna está apontando, que é o primeiro elemento por padrão.
$first = current($array);
Se você quiser ter certeza de que está apontando para o primeiro elemento, sempre poderá usar reset().
Gosto dessa resposta como a mais completa, mas a nota reset()realmente retorna o elemento, portanto, depois de com a $first = current($array)é redundante.
21813 Tom Auger
9
Apenas para que possamos ter outras opções: reset($arr);bom o suficiente se você não estiver tentando manter o ponteiro da matriz no lugar e, com matrizes muito grandes, isso gera uma quantidade mínima de sobrecarga. Dito isto, existem alguns problemas com isso:
reset()é uma opção muito melhor, pois retorna false se a matriz estiver vazia. sua solução não vai funcionar, por exemplo, na questão
Northys
1
No PHP 7+, algo assim funcionaria:array_values($array)[0] ?? FALSE
MarthyM 7/18/18
4
Teste se a variável a é uma matriz antes de obter o primeiro elemento. Ao criar dinamicamente a matriz, se estiver definida como nula, você receberá um erro.
Isso funciona apenas quando o ponteiro interno está no primeiro elemento. Embora isso seja bom porque não redefine a posição do ponteiro, ele só funciona quando o ponteiro já está parado.
Cjc # 10/18
1
A partir do PHP 7.3.0 é possível fazer sem redefinir o ponteiro interno. Você usaria array_key_first. Se você tem certeza de que sua matriz possui valores, basta fazer o seguinte:
$first = $array[array_key_first($array)];
Provavelmente, você desejará lidar com o caso em que a matriz está vazia:
Respostas:
reset()
fornece o primeiro valor da matriz se você tiver um elemento dentro da matriz:Também fornece
FALSE
caso a matriz esteja vazia.fonte
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7.3
Se você não souber o suficiente sobre a matriz (não tem certeza se a primeira chave é foo ou bar ), a matriz também pode estar vazia .
Portanto, seria melhor verificar, especialmente se houver a chance de o valor retornado ser o booleano FALSE:
O código acima usa
reset
e, portanto, tem efeitos colaterais (redefine o ponteiro interno da matriz); portanto, você pode preferir usararray_slice
para acessar rapidamente uma cópia do primeiro elemento da matriz:Supondo que você deseja obter a chave e o valor separadamente , é necessário adicionar o quarto parâmetro em
array_slice
:Para obter o primeiro item como um par (
key => value
):Modificação simples para obter o último item, chave e valor separadamente:
desempenho
Se a matriz não for realmente grande, você realmente não precisa
array_slice
e pode obter uma cópia de toda a matriz de chaves e obter o primeiro item:Porém, se você tiver uma matriz muito grande, a chamada
array_keys
exigirá mais tempo e memória do quearray_slice
(ambas as funções percorrem a matriz, mas a última termina assim que reunir o número necessário de itens - que é um).Uma exceção notável é quando você tem a primeira chave que aponta para um objeto muito grande e complicado. Nesse caso
array_slice
irá duplicar esse primeiro objeto grande, enquantoarray_keys
só vai pegar as chaves.PHP 7.3
Implementa o PHP 7.3
array_key_first()
e tambémarray_key_last()
. Elas são fornecidas explicitamente para acessar a primeira e a última chave com eficiência, sem redefinir o estado interno da matriz como efeito colateral.Portanto, no PHP 7.3, o primeiro valor de
$array
pode ser acessado comVocê ainda deve verificar se a matriz não está vazia, ou você receberá um erro:
fonte
Loop falso que quebra na primeira iteração:
Ou use
each()
( aviso: descontinuado a partir do PHP 7.2.0 ):fonte
reset()
função recuperaria apenas o primeiro valor.Existem algumas opções.
array_shift()
retornará o primeiro elemento, mas também removerá o primeiro elemento da matriz.current()
retornará o valor da matriz que seu ponteiro de memória interna está apontando, que é o primeiro elemento por padrão.Se você quiser ter certeza de que está apontando para o primeiro elemento, sempre poderá usar
reset()
.fonte
reset()
realmente retorna o elemento, portanto, depois de com a$first = current($array)
é redundante.Apenas para que possamos ter outras opções:
reset($arr);
bom o suficiente se você não estiver tentando manter o ponteiro da matriz no lugar e, com matrizes muito grandes, isso gera uma quantidade mínima de sobrecarga. Dito isto, existem alguns problemas com isso:A maneira de fazer isso sem alterar o ponteiro:
O benefício de
$arr[reset(array_keys($arr))];
é que ele gera um aviso se a matriz estiver realmente vazia.fonte
Outra maneira fácil e simples de fazer isso é usar array_values
fonte
reset()
é uma opção muito melhor, pois retorna false se a matriz estiver vazia. sua solução não vai funcionar, por exemplo, na questãoarray_values($array)[0] ?? FALSE
Teste se a variável a é uma matriz antes de obter o primeiro elemento. Ao criar dinamicamente a matriz, se estiver definida como nula, você receberá um erro.
Por exemplo:
fonte
Nós podemos fazer
$first = reset($array);
Ao invés de
Como
reset()
retorna o primeiro elemento da matriz após a redefinição;
fonte
Você pode fazer:
fonte
Use a função reset () para obter o primeiro item dessa matriz sem conhecer a chave para isso assim.
saída // 400
fonte
Você pode tentar isso.
Para obter o primeiro valor da matriz: -
Para obter a primeira chave da matriz
fonte
Você poderia usar array_shift
fonte
Faço isso para obter o primeiro e o último valor. Isso funciona com mais valores também.
fonte
A partir do PHP 7.3.0 é possível fazer sem redefinir o ponteiro interno. Você usaria
array_key_first
. Se você tem certeza de que sua matriz possui valores, basta fazer o seguinte:Provavelmente, você desejará lidar com o caso em que a matriz está vazia:
fonte
você pode apenas usar
$array[0]
. ele vai te dar o primeiro item semprefonte