site - Como obter o primeiro item de uma matriz PHP associativa?



php site (10)

Se eu tivesse uma matriz como:

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

E eu queria tirar o primeiro item dessa matriz sem saber a chave para isso, como eu faria isso? Existe uma função para isso?

https://src-bin.com


Answer #1

PHP <7,3

Se você não sabe o suficiente sobre o array (você não tem certeza se a primeira chave é foo ou bar ), então o array pode também estar, talvez, vazio .

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 reset e assim tem efeitos colaterais (ele redefine o ponteiro interno do array), então você pode preferir usar array_slice para acessar rapidamente uma cópia do primeiro elemento do array:

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

Supondo que você quer obter tanto a chave quanto o valor separadamente , você precisa adicionar o quarto parâmetro ao array_slice :

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

Para obter o primeiro item como um par ( key => value ):

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

Modificação simples para obter o último item, chave e valor separadamente:

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

desempenho

Se a matriz não é realmente grande, você não precisa realmente de array_slice e pode preferir obter uma cópia da matriz de chaves inteira e, em seguida, obter o primeiro item:

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

Se você tem uma matriz muito grande, no entanto, a chamada para array_keys exigirá tempo e memória significativos mais 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_slice irá duplicar o primeiro objeto grande, enquanto array_keys irá apenas pegar as chaves.

PHP 7.3

O PHP 7.3 implementa array_key_first() assim como array_key_last() . Eles são fornecidos explicitamente para acessar a primeira e a última chaves de maneira eficiente, sem redefinir o estado interno da matriz como um efeito colateral.

Então, no PHP 7.3, o primeiro valor de $array pode 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];
}

Answer #2

A partir do PHP 7.3.0 é possível fazer sem resetar o ponteiro interno. Você usaria array_key_first . Se você tem certeza que sua matriz tem valores, então você pode simplesmente fazer:

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

Mais provavelmente, você vai querer lidar com o caso em que a matriz está vazia:

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

Answer #3

Eu faço isso para obter o primeiro e último valor. Isso funciona com mais valores também.

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

Answer #4

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 para a qual o ponteiro da 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, você sempre pode usar reset() .

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

Answer #5

Nós podemos fazer $first = reset($array);

Ao invés de

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

Como reset()

retorna o primeiro elemento da matriz após a redefinição;


Answer #6

Teste se a variável é uma matriz antes de obter o primeiro elemento. Ao criar dinamicamente o array, se estiver definido como null, você receberá um erro.

Por exemplo:

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

Answer #7

Você pode fazer:

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

Answer #8

Você pode tentar isso.

Para obter o primeiro valor da matriz: -

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

Para obter a primeira chave do array

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

Answer #9

outra maneira fácil e simples de fazer isso use array_values

array_values($array)[0]

Answer #10

você pode apenas usar $array[0] . ele vai te dar o primeiro item sempre





php