2009-09-20 17 views

risposta

48

Nel codice di esempio, sarebbe solo $key.

Se volete sapere, per esempio, se questo è il primo, secondo, oppure i esimo iterazione del ciclo, questa è l'unica opzione:

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

Naturalmente, questo doesn' t significa che $val == $arr[$i] perché la matrice potrebbe essere un array associativo.

+0

Forse inizia con '$ i = 0;' e sposta il tuo incrementatore '$ i ++;' nella parte inferiore del ciclo per una migliore leggibilità. – pbarney

+1

@pbarney Non sono d'accordo.Effettuare l'incremento alla fine è un errore in attesa che succeda: se c'è un'istruzione 'continue;' nel corpo del ciclo, o qualcuno potrebbe ragionevolmente aggiungerne uno in futuro, un incremento alla fine non funziona. Inoltre, mantiene la dichiarazione della variabile e dell'incremento vicini. – Kip

0

$key è l'indice per l'elemento di matrice corrente e $val è il valore di tale elemento dell'array.

Il primo elemento ha un indice pari a 0. Pertanto, per accedervi, utilizzare $arr[0]

per ottenere il primo elemento della matrice, utilizzare questo

$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

L'indice corrente è il valore di $key. E per l'altra domanda, è anche possibile utilizzare:

current($arr) 

per ottenere il primo elemento di un array, partendo dal presupposto che non si utilizza il next(), prev() o altre funzioni per modificare il puntatore interno dell'array.

+1

-1 per $ chiave come indice poiché gli array possono avere chiavi non interi. – Eimantas

+1

+1 come indice non deve essere un numero intero: http://en.wikipedia.org/wiki/Index#Computer_science – Mathias

0

È possibile ottenere il primo elemento anche nella funzione array_keys(). O array_search() le chiavi per "l'indice" di una chiave. Se ci si trova all'interno di un ciclo foreach, il semplice contatore incrementale (suggerito da kip o cletus) è probabilmente il metodo più efficiente.

<?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

Questa è la risposta più esauriente finora ed elimina la necessità di un $i variabile galleggianti intorno. È una combinazione delle risposte di Kip e 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>'; 
} 

Spero che aiuti qualcuno.

+1

creare un'intera nuova serie di lunghezza 'count ($ array)' sembra un sacco di overhead per evitare di introdurre una variabile scalare – Kip

+2

array_keys è stata la soluzione per me grazie! – MrWashinton

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

$ chiave è l'indice di ogni $ array elemento

+2

Non necessariamente. Se il tuo array ha questo aspetto: '$ array = array ('cat' => 'meow', 'dog' => 'woof', 'cow' => 'moo', 'computer' => 'beep'); 'la chiave $ del primo elemento sarebbe 'gatto'. –

+0

Grazie per la risposta. Penso che l'indice sarà la chiave. Qui ci sono: 'gatto', 'cane', ... –

+1

Non capisco perché questa non è la migliore risposta in questa pagina. –

0

bene dato che questo è il primo colpo di Google per questo 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

È possibile ottenere il valore dell'indice con questo

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 

} 
Problemi correlati