2009-12-23 9 views
111

Mi matriz asociativa:¿Cómo recorrer una matriz asociativa y obtener la clave?

$arr = array(
    1 => "Value1", 
    2 => "Value2", 
    10 => "Value10" 
); 

Usando el siguiente código, $v está lleno de $arr 's valores

foreach($arr as $v){ 
    echo($v); // Value1, Value2, Value10 
} 

¿Cómo llego $arr' s claves en su lugar?

foreach(.....){ 
    echo($k); // 1, 2, 10 
} 
+3

Por cierto, se está perdiendo en la matriz. –

+1

La última coma es opcional, ¿no es así? –

Respuesta

233

que puede hacer:

foreach ($arr as $key => $value) { 
echo $key; 
} 

Como se describe en PHP docs.

+2

@codaddict, ¿La secuencia del 'foreach' garantiza la misma secuencia que en la declaración? – Pacerier

53

Si utiliza array_keys(), PHP le dará una matriz llena con sólo las teclas:

$keys = array_keys($arr); 
foreach($keys as $key) { 
    echo($key); 
} 

Alternativamente, usted puede hacer esto:

foreach($arr as $key => $value) { 
    echo($key); 
} 
+1

En la primera solución, mi IDE (Netbeans) no da una advertencia de que la variable $ value no se usa, así que aquí está + 1 –

+2

¿cuál es más rápido? –

+0

@TrevorJohns, ¿está garantizada la orden? – Pacerier

4

A continuación se le permitirá para obtener tanto la clave como el valor al mismo tiempo.

foreach ($arr as $key => $value) 
{ 
    echo($key); 
} 
10
foreach($array as $k => $v) 

Donde $ k es la clave y $ v es el valor

O si sólo tiene las claves utilizan array_keys()

0
foreach($arr as $key=>$value){ 
    echo($key); // key 
} 
1

Oh Lo encontré en PHP manual.

foreach ($array as $key => $value){ 
    statement 
} 

la clave del elemento actual se asigna a la variable $ clave en cada bucle.

1

Uso $key => $val para obtener las claves:

<?php 

$arr = array(
    1 => "Value1", 
    2 => "Value2", 
    10 => "Value10", 
); 

foreach ($arr as $key => $val) { 
    print "$key\n"; 
} 

?> 
3

Aunque podría decirse que es menos claro que este método es más rápido en aproximadamente un factor de aproximadamente 3.5 (al menos en la caja que utiliza para probar)

$foo = array(
    1 => "Value1", 
    2 => "Value2", 
    10 => "Value10" 
); 
while($bar = each($foo)){ 
    echo $bar[0] . " => " . $bar[1]; 
} 

Me imagino que esto se debe al hecho de que foreach copia toda la matriz antes de iterar sobre ella.

7

uso el siguiente bucle para obtener la clave y el valor de una matriz asociativa

foreach ($array as $key => $value) 
{ 
    echo "<p>$key = $value</p>"; 
} 
+2

¡La única respuesta que describe clara y concisamente cómo usar la clave y el valor en el ciclo! – SharpC

19

Nadie respondió con el lazo regulares for?A veces se me hace más fácil de leer y prefiero for sobre foreach
Así que aquí está:

comas
$array = array('key1' => 'value1', 'key2' => 'value2'); 

$keys = array_keys($array); 

for($i=0; $i < count($keys); ++$i) { 
    echo $keys[$i] . ' ' . $array[$keys[$i]] . "\n"; 
} 

/* 
    prints: 
    key1 value1 
    key2 value2 
*/ 
+1

Esto es útil en algunas circunstancias cuando foreach falla por razones inexplicables. Es bueno tener siempre al menos dos formas de hacer las cosas. – liljoshu

+1

No hay razones "inexplicables" cuando se trata de computadoras. – JDrake

+1

También es útil para cuando quiere combinar dos elementos de matriz subsiguientes. i + = 2 y luego usando $ array [$ keys [$ i]]. "_". $ array [$ keys [$ i + 1]] Solo en caso de que alguien más tenga este mismo problema –

1
<?php 
$names = array("firstname"=>"maurice", 
       "lastname"=>"muteti", 
       "contact"=>"7844433339"); 

foreach ($names as $name => $value) { 
    echo $name." ".$value."</br>"; 
} 

print_r($names); 
?> 
Cuestiones relacionadas