2010-09-21 18 views
20

¿Cómo puedo obtener el número de elemento actual cuando estoy atravesando una matriz?PHP - Obtener el índice de un elemento de una matriz

Sé acerca de count(), pero esperaba que haya una función incorporada para obtener también el índice de campo actual, sin tener que agregar una variable de contador adicional.

así:

foreach($array as $key => value) 
    if(index($key) == count($array) .... 
+0

¿Qué hay de malo en usar '$ key'? – BoltClock

+0

$ key es una cadena en mi caso. De todos modos, me preguntaba si hay una función php que pueda obtener el índice de campo. si no, usaré un contador de $ i ... – Alex

+0

En el caso de una matriz donde la clave no coincide con el índice del elemento de la matriz, creo que Alex desea obtener el índice actual. P. ej .: 'a => manzanas, b => plátanos': entonces' índice (b) 'devolvería' 1'. –

Respuesta

37

Se debe utilizar la función de key().

key($array) 

debe devolver la clave actual.

Si necesita la posición de la clave actual:

array_search($key, array_keys($array)); 
+4

OP quiere una posición, no una clave. No es necesario obtener un kay como tal; una variable de $ asignada a $ key –

+1

+1 Buena respuesta, me gustaría señalarle a Alex que agregar un contador sería más eficiente que buscar en la matriz cada vez. – Gazler

+1

, por lo que no hay una función tipo índice. gracias :) Voy a usar un contador – Alex

4
foreach() { 
    $i++; 
    if(index($key) == $i){} 
    // 
} 
+1

dijo sin tener que agregar una variable de contador adicional – rideon88

+0

@rideon Los OP a menudo tienen deseos extraños. No lo tome demasiado literalmente;) En realidad, este debería ser aceptado. –

-2

No hay manera de conseguir una posiciónque realmente quiere. Para
matriz asociativa, para determinar última iteración puede utilizar variable de contador ya se ha mencionado, o determinar la clave del último punto primero:

end($array); 
$last = key($array); 
foreach($array as $key => value) 
    if($key == $last) .... 
9

matrices de PHP son ambos enteros indexados y la cadena indexados. Incluso se puede mezclar:

array('red', 'green', 'white', 'color3'=>'blue', 3=>'yellow'); 

¿Qué desea que el índice sea por el valor 'blue'? ¿Es 3? Pero ese es en realidad el índice del valor 'yellow', por lo que sería una ambigüedad.

Otra solución para usted es forzar la matriz a una lista de valores indexada entera.

foreach (array_values($array) as $i => $value) { 
    echo "$i: $value\n"; 
} 

de salida:

0: red 
1: green 
2: white 
3: blue 
4: yellow 
-2

una matriz no contiene índice cuando los elementos son asociativas. Una matriz en PHP puede contener valores mixtos como esto:

$var = array("apple", "banana", "foo" => "grape", "carrot", "bar" => "donkey"); 
print_r($var); 

le ofrece:

Array 
(
    [0] => apple 
    [1] => banana 
    [foo] => grape 
    [2] => carrot 
    [bar] => donkey 
) 

¿Qué está tratando de lograr ya que se necesita el valor del índice en una matriz asociativa?

0
function Index($index) { 
    $Count = count($YOUR_ARRAY); 
    if ($index <= $Count) { 
     $Keys = array_keys($YOUR_ARRAY); 
     $Value = array_values($YOUR_ARRAY); 
     return $Keys[$index] . ' = ' . $Value[$index]; 
    } else { 
     return "Out of the ring"; 
    } 
} 

echo 'Index : ' . Index(0); 

Sustituir el ($ YOUR_ARRAY)

Cuestiones relacionadas