2010-09-27 13 views
46

Ho una matrice che è strutturata in questo modo:Ottenere ultima coppia chiave-valore in PHP serie

[33] => Array 
    (
     [time] => 1285571561 
     [user] => test0 
    ) 

[34] => Array 
    (
     [time] => 1285571659 
     [user] => test1 
    ) 

[35] => Array 
    (
     [time] => 1285571682 
     [user] => test2 
    ) 

Come posso ottenere l'ultimo valore nella matrice, ma mantenendo l'indice [35]?

Il risultato che sto cercando è questo:

[35] => Array 
    (
     [time] => 1285571682 
     [user] => test2 
    ) 
+0

couse ho un piccolo shoutbox, basato su file, e voglio mostrare solo un urlo, il file è serializzato. – greenbandit

risposta

152

tenta di utilizzare

end($array); 
+13

Questo è il modo migliore per ottenere il _value_ dell'ultimo elemento dell'array, ma l'OP chiede un array contenente solo l'ultimo elemento (con il suo indice corretto). Tuttavia, +1 come questo è ciò che la maggior parte delle persone che googling di questo avrà bisogno. – dotancohen

+0

L'OP chiedeva esplicitamente *** ... ma mantenendo l'indice [35]? ***. L'OP ripete questo desiderio nel commento sulla risposta di Gumbo. Penso quindi sia fuorviante che questa risposta sia selezionata come risposta accettata. La risposta di @salathe descrive meglio il comportamento richiesto dall'OP. –

10

È possibile utilizzare end per far avanzare il puntatore interno alla fine o array_slice per ottenere un array unico che contiene l'ultimo elemento:

$last = end($arr); 
$last = current(array_slice($arr, -1)); 
+0

ma ho bisogno di conservare l'indice, come: [35] => Array ( [ora] => 1.285.571,682 mila [utente] => test2 ) – greenbandit

+0

Se è necessario per preservare l'indice, è possibile utilizzare array_slice() . Vedi http://stackoverflow.com/questions/3801891/get-last-value-in-array/3802007#3802007 –

2

Come detto Gumbo,

<?php 

$fruits = array('apple', 'banana', 'cranberry'); 
echo end($fruits); // cranberry 

?> 
67
$last = array_slice($array, -1, 1, true); 

Vedi http://php.net/array_slice per dettagli su cosa significano gli argomenti.

P.S. A differenza delle altre risposte, questo fa effettivamente quello che vuoi. :-)

+0

Ma questo restituisce altro array non solo la stringa – ssamuel68

+4

+1 Questo fa effettivamente ciò che la domanda ha posto - conserva l'indice e restituisce un array con un singolo elemento (che è quello che era implicito nell'esempio nella domanda). – JMTyler

2
// if your array keys lile 
// 0 1 2 3 4 ... 

$lastindex= count($ar)-1; 

// but if you are not sure 

$ar_k=array_keys($ar); 
$lastindex=$ar_k[count($ar_k)-1]; 

// will work 
4

Se si dispone di una matrice

$last_element = array_pop(array); 
1

Un'altra soluzione fredda essere:

$value = $arr[count($arr) - 1]; 

Quanto sopra conta il numero di valori di matrice, sottrazioni 1 e quindi il ritorno valore.

Nota: questo può essere utilizzato solo se i tasti dell'array sono numerici.

0

Come la chiave è necessaria, la soluzione accettata non funziona.

questo:

end($array); 
return array(key($array) => array_pop($array)); 

tornerà esattamente come l'esempio nella questione.