2009-09-20 13 views

Respuesta

48

En el código de ejemplo, simplemente sería $key.

Si usted quiere saber, por ejemplo, si este es el primer, segundo o i º iteración del bucle, esta es su única opción:

$i = -1; 
foreach($arr as $val) { 
    $i++; 
    //$i is now the index. if $i == 0, then this is the first element. 
    ... 
} 

Por supuesto, este doesn' t significa que $val == $arr[$i] porque la matriz podría ser una matriz asociativa.

+0

Quizás comience con '$ i = 0;' y mueva su incremento '$ i ++;' al final del ciclo para una mejor legibilidad. – pbarney

+1

@pbarney No estoy de acuerdo.Hacer el incremento al final es un error que está por ocurrir: si hay una instrucción 'continue;' en el cuerpo del ciclo, o alguien podría razonablemente agregar una en el futuro, un incremento al final no funciona. Además, esto mantiene la declaración de la variable y el incremento juntos. – Kip

0

$key es el índice para el elemento de la matriz actual y $val es el valor de ese elemento de matriz.

El primer elemento tiene un índice de 0. Por lo tanto, para acceder a ella, utilice $arr[0]

Para obtener el primer elemento de la matriz, utilice este

$firstFound = false; 
foreach($arr as $key=>$val) 
{ 
    if (!$firstFound) 
     $first = $val; 
    else 
     $firstFound = true; 
    // do whatever you want here 
} 

// now ($first) has the value of the first element in the array 
10
$i = 0; 
foreach ($arr as $key => $val) { 
    if ($i === 0) { 
    // first index 
    } 
    // current index is $i 

    $i++; 
} 
2

El índice actual es el valor de $key. Y por la otra pregunta, también se puede utilizar:

current($arr) 

para obtener el primer elemento de cualquier array, siempre que no se está utilizando el next(), prev() u otras funciones para cambiar el puntero interno de la matriz.

+1

-1 para $ key como índice ya que las matrices pueden tener claves no enteras. – Eimantas

+1

+1 como índice no tiene que ser un número entero: http://en.wikipedia.org/wiki/Index#Computer_science – Mathias

0

También puede obtener el primer elemento en la función array_keys(). O array_search() las teclas para el "índice" de una tecla. Si se encuentra dentro de un bucle foreach, el contador incremental simple (sugerido por kip o cletus) es probablemente su método más eficiente.

<?php 
    $array = array('test', '1', '2'); 
    $keys = array_keys($array); 
    var_dump($keys[0]); // int(0) 

    $array = array('test'=>'something', 'test2'=>'something else'); 
    $keys = array_keys($array); 

    var_dump(array_search("test2", $keys)); // int(1)  
    var_dump(array_search("test3", $keys)); // bool(false) 
13

Esta es la respuesta más exhaustiva hasta la fecha y se deshace de la necesidad de una variable de $i flotando alrededor. Es un combo de las respuestas de Kip y Gnarf.

$array = array('cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep'); 
foreach(array_keys($array) as $index=>$key) { 

    // display the current index + key + value 
    echo $index . ':' . $key . $array[$key]; 

    // first index 
    if ($index == 0) { 
     echo ' -- This is the first element in the associative array'; 
    } 

    // last index 
    if ($index == count($array) - 1) { 
     echo ' -- This is the last element in the associative array'; 
    } 
    echo '<br>'; 
} 

Espero que ayude a alguien.

+1

creando una nueva matriz de longitud 'count ($ array)' parece mucho sobrecarga para evitar introducir una variable escalar – Kip

+2

array_keys fue la solución para mí, ¡gracias! – MrWashinton

5
foreach($array as $key=>$value) { 
    // do stuff 
} 

$ clave es el índice de cada $ array elemento

+2

No necesariamente. Si su matriz se ve así: '$ array = array ('cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep'); 'la $ key del primer artículo sería 'cat'. –

+0

Gracias por su respuesta. Creo que el índice será la clave. Aquí están: 'gato', 'perro', ... –

+1

No entiendo por qué esta no es la mejor respuesta en esta página. –

0

bien ya que esta es la primera google éxito para este problema:

function mb_tell(&$msg) { 
    if(count($msg) == 0) { 
     return 0; 
    } 
    //prev($msg); 
    $kv = each($msg); 
    if(!prev($msg)) { 
     end($msg); 

     print_r($kv); 
     return ($kv[0]+1); 
    } 
    print_r($kv); 
    return ($kv[0]); 
} 
3

, usted puede obtener el valor del índice con esto

foreach ($arr as $key => $val) 
{ 
    $key = (int) $key; 
    //With the variable $key you can get access to the current array index 
    //You can use $val[$key] to 

} 
Cuestiones relacionadas