2010-02-09 10 views
5

Esto podría sonar como una pregunta tonta. ¿Cómo obtengo el primer valor de una matriz sin saber de antemano si la matriz es asociativa o no?php obtener el primer valor de una matriz (asociativo o no)

Con el fin de conseguir el primero elemento de una matriz que pensé que hacer esto:

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

¿Está bien? ¿Podría crear problemas si el puntero interno de la matriz se movió antes de llamar a la función? ¿Existe alguna forma mejor/más inteligente/más fatser de hacerlo?

Gracias!

+1

Me pregunto cómo definir un "primer" elemento en una matriz asociativa;) – phunehehe

Respuesta

9

Una mejor idea puede ser utilizar reset que "rebobina puntero interno de la matriz con el primer elemento y devuelve el valor del primer elemento de la matriz"

Ejemplo:

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

Como @therefromhere señaló en el comentario a continuación, esta solución no es ideal ya que cambia el estado del puntero interno. Sin embargo, no creo que sea un gran problema ya que otras funciones como array_pop también lo reinician.
La principal preocupación es que no se puede utilizar al iterar sobre una matriz no es un problema ya que foreach opera en una copia de la matriz. El manual de PHP indica:

A menos que se haga referencia a la matriz, foreach opera en una copia de la matriz especificada y no la matriz en sí.

Esto se puede demostrar usando un código simple prueba:

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

Resultado:

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

Vale la pena señalar que ya que rebobina el puntero interno, entonces no debe hacer esto si está en el medio de iterar esta matriz. –

+0

Great Yacoby, por lo tanto, el puntero interno no se ve afectado por los bucles foreach. –

+0

foreach funciona en una copia de la matriz – meouw

1

para obtener el primer elemento para cualquier matriz, es necesario restablecer el puntero del primero. http://ca3.php.net/reset

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

Si no le importa perder el primer elemento de la matriz, también se puede utilizar

array_shift()- desplaza el primer valor de la matriz y lo devuelve él, acortando la matriz en un elemento y mover todo hacia abajo. Todas las teclas numéricas de la matriz se modificarán para comenzar a contar desde cero, mientras que las claves literales no se tocarán.

O usted podría envolver la matriz en un ArrayIterator y utilizar seek:

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

Si esto no es una opción o bien, utilizar una de las otras sugerencias.

+0

Me importa perder el 1er elemento. ¡Gracias de cualquier manera! –

Cuestiones relacionadas