2015-09-15 17 views
5

Nel mio codice seguente posso esplodere e ottenere i miei 3 elementi imei, lat, lon poiché la risposta stava restituendo solo i 3 dati separati da ' '.Come posso prendere solo alcuni dati specifici esplodendo?

$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port); 
    echo "$remote_ip : $remote_port -- " . $buf; 

    list($imei,$lat,$lon) = explode(' ', $buf, 3); 

Ma cosa succede se la risposta mi manda un sacco di dati separati da ' ' ma ancora ho bisogno solo i 3 elementi. Non ho bisogno dei dati di riposo. Come posso esplodere in questo modo?

I dati non saranno i primi tre elementi restituiti da explode().

risposta

4

Basta aggiungere un altro virgola per list() di ignorare i valori rimanenti:

list($imei,$lat,$lon,) = explode(' ', $buf); 

Demo

Oppure, se i valori sono in luoghi specifici nel vostro matrice:

list($imei, , $lat, , $lon,) = explode(' ', $buf); 

Demo

I segnaposto vuoti "salta" questi valori e non vengono mai assegnati a una variabile.

+0

e se i dati restituiti non sono in ordine? Voglio dire (dati necessari) (non hanno bisogno di dati) (dati necessari) (non hanno bisogno di dati)? Come posso ignorarli? – hhs

+0

Lascia gli spazi vuoti dove non vuoi il valore. Aggiornerò la mia risposta di conseguenza. –

+0

È inoltre necessario aggiornare l'offset 'limite'. –

-1

In realtà non è necessario fare nulla. Se ci sono elementi extra nell'array esploso, l'elenco non sarà utile.

See:

$string = "a b c d e f"; 
list($a,$b,$c) = explode(' ',$string); 
0

Come estensione @ risposta di Giovanni, c'è un'altra funzione php strtok() che è utile in questo tipo di scenari

$imei = strtok($buf, ' '); 
$lat = strtok(' '); 
$lon = strtok(' '); 

Ora, supponiamo che se la stringa

$buf = 'test1 test2 test3 test4 test5'; 

$imei, $lat, $lon sarà,

string 'test1' (length=5) 
string 'test2' (length=5) 
string 'test3' (length=5) 

Dalla pagina di manuale php.net,

Nota che solo la prima chiamata a strtok utilizza l'argomento stringa. Ogni chiamata successiva a strtok richiede solo il token da utilizzare, in quanto tiene traccia di dove si trova nella stringa corrente. Per ricominciare, o per tokenizzare una nuova stringa, è sufficiente chiamare strtok con l'argomento stringa di nuovo per inizializzarlo. Si noti che è possibile inserire più token nel parametro token. La stringa verrà tokenizzata quando viene trovato uno dei caratteri nell'argomento.