2010-02-09 4 views
5

Cela peut sembler une question stupide. Comment obtenir la 1ère valeur d'un tableau sans savoir à l'avance si le tableau est associatif ou non?php obtient la 1ère valeur d'un tableau (associatif ou non)

Afin d'obtenir le 1er élément d'un tableau que je pensais le faire:

function Get1stArrayValue($arr) { return current($arr); } 

est-il correct? Pourrait-il créer des problèmes si le pointeur interne de tableau a été déplacé avant l'appel de fonction? Y a-t-il une meilleure façon de le faire?

Merci!

+1

Je me demande comment vous définissez un "premier" élément dans un tableau associatif;) – phunehehe

Répondre

9

Une meilleure idée serait d'utiliser reset qui « rembobine pointeur interne de tableau au premier élément et renvoie la valeur du premier réseau élément »

Exemple:

function Get1stArrayValue($arr) { return reset($arr); } 

Comme @therefromhere indiqué dans le commentaire ci-dessous, cette solution n'est pas idéale car elle change l'état du pointeur interne. Cependant, je ne pense pas que ce soit un problème car d'autres fonctions telles que array_pop le réinitialisent également.
La principale préoccupation qu'il ne pouvait pas être utilisé lors de l'itération sur un tableau n'est pas un problème car foreach fonctionne sur une copie de la matrice. Le manuel PHP indique:

À moins que le tableau ne soit référencé, foreach opère sur une copie du tableau spécifié et non sur le tableau lui-même.

Cela peut être montré en utilisant un code de test simple:

$arr = array("a", "b", "c", "d"); 
foreach ($arr as $val){ 
    echo reset($arr) . " - " . $val . "\n"; 
} 

Résultat:

a - a 
a - b 
a - c 
a - d 
+5

Il est à noter que, puisqu'il rembobine le pointeur interne, vous ne devriez pas le faire si vous êtes en train d'itérer ce tableau. –

+0

Great Yacoby, le pointeur interne n'est donc pas affecté par les boucles foreach. –

+0

foreach fonctionne sur une copie du tableau – meouw

1

Pour obtenir le premier élément pour tout tableau, vous devez réinitialiser le pointeur en premier. http://ca3.php.net/reset

function Get1stArrayValue($arr) { 
    return reset($arr); 
} 
0

Si cela ne vous dérange pas de perdre le premier élément du tableau, vous pouvez également utiliser

array_shift()- décale la première valeur du tableau et la retourne, en raccourcissant le tableau par un élément et tout déplacer vers le bas. Toutes les touches du tableau numérique seront modifiées pour commencer à compter à partir de zéro tandis que les touches littérales ne seront pas touchées.

Ou vous pouvez envelopper le tableau dans un ArrayIterator et utiliser seek:

$array = array("foo" => "apple", "banana", "cherry", "damson", "elderberry"); 
$iterator = new ArrayIterator($array); 
$iterator->seek(0); 
echo $iterator->current(); // apple 

Si ce n'est pas une option non plus, utilisez l'une des autres suggestions.

+0

Je me dérange perdre le 1er élément. Merci quand même! –

Questions connexes