2010-02-15 3 views
7

Perché non riesco ad accedere immediatamente agli elementi dell'array restituiti da explode()?Perché non posso accedere immediatamente all'elemento di array esploso?

Ad esempio, questa non funziona:

$username = explode('.',$thread_user)[1]; 
//Parse error: syntax error, unexpected '[ 

Ma questo codice fa:

$username = explode('.',$thread_user); 
$username = $username[1]; 

Io di solito non programma in PHP, quindi questo è piuttosto confuso per me.

risposta

4

In realtà, PHP semplicemente non supporta questa sintassi. In linguaggi come Javascript (ad esempio), il parser può gestire operazioni di nidificazione/concatenazione più complesse, ma PHP non è una di quelle lingue.

+2

^la vera risposta. Anche se si scrive una funzione che restituisce un array invariante, non è ancora possibile indicizzare la chiamata della funzione (poiché la risposta di James potrebbe indurvi a credere), perché è semplicemente una questione di sintassi che non funziona. – Chuck

+0

+1 per il commento di Chuck - chiaramente alcune programmazioni difensive mi hanno permesso di evitare di imparare PHP nel modo più completo possibile. (e forse non dovrei provare a rispondere alle domande l'ultimo giorno di un weekend di tre giorni ...) –

6

Il motivo per cui non è ovvio come fare ciò che si desidera è che explode potrebbe restituire false. Dovresti controllare il valore di ritorno prima di indicizzarlo.

+0

Grazie. Non sono abituato a restituire valori che si comportano così e mi sono perso quando ho controllato il manuale PHP. –

+0

Mi è sempre sembrato un po 'strano, ma è utile, e non più brutto di ad es. dover controllare le chiamate a malloc in C per i ritorni NULL. –

+2

In realtà solo che la sintassi PHP non supporta questo. Stai semplicemente dicendo che è inteso in quel modo per far sì che le persone controllino i loro valori di ritorno? – falstro

2

Dal explode() restituisce un array, è possibile utilizzare altre funzioni come $username = current(explode('.',$thread_user));

1

mi basta usare la mia propria funzione:

function explodeAndReturnIndex($delimiter, $string, $index){ 
    $tempArray = explode($delimiter, $string); 
    return $tempArray[$index]; 
} 

il codice per l'esempio potrebbe quindi essere:

$username = explodeAndReturnIndex('.', $thread_user, 1); 
1

Ecco come ottenere il basso per una riga:

$username = current(array_slice(explode('.',$thread_user), indx,1));

Dove indx è l'indice che si desidera dall'array esploso. Sono nuovo a php ma mi piace dire array esploso :)