2009-11-27 19 views
14

ho scritto quello che pensavo fosse un semplice utilizzo della funzione php explode() per dividere un nome in nome e cognome:undefined compensato quando si usa PHP explode()

// split name into first and last 
$split = explode(' ', $fullname, 2); 
$first = $split[0]; 
$last = $split[1]; 

Tuttavia, questo è vomitare un errore php con il messaggio "Undefined offset: 1". La funzione sembra funzionare, ma vorrei chiarire qualunque cosa stia causando l'errore. Ho controllato lo php manual ma i loro esempi usano la stessa sintassi di cui sopra. Penso di capire cos'è un offset indefinito, ma non riesco a capire perché il mio codice stia generando l'errore!

+8

Puoi fornire il valore di '$ fullname' che ti dà l'errore? –

risposta

36

questo perché il tuo nome completo non contiene uno spazio. È possibile utilizzare un semplice trucco per assicurarsi che lo spazio è sempre dove

$split = explode(' ', "$fullname "); 

(notare lo spazio all'interno delle virgolette)

BTW, è possibile utilizzare l'elenco() per semplificare il codice

list($first, $last) = explode(' ', "$fullname "); 
+5

+1 per l'uso di 'list()'. – jensgram

+0

È grandioso. Non avevo capito di poter inserire una variabile tra virgolette. Inoltre, grazie per il suggerimento 'lista()' bonus. – musoNic80

+0

Abbastanza elegante mod. ;) – Gustav

2

Presumibilmente, ciò è $fullname non contiene uno spazio, quindi $split è una matrice contenente un unico elemento, così $split[1] si riferisce ad una undefined sfalsati.

3

Questo potrebbe essere dovuto al fatto che $fullname non conteneva un carattere di spazio.

Questo esempio dovrebbe risolvere il problema w/o la visualizzazione di questo avviso:

$split = explode(' ', $fullname, 2); 
$first = @$split[0]; 
$last = @$split[1]; 

Ora, se è $fullname"musoNic80" non sarà possibile ottenere un messaggio di notifica.

Nota l'uso di caratteri "@".

HTH Elias

+3

Ha senso, ma preferirei trovare un modo per risolvere il problema piuttosto che sopprimere gli errori. Grazie comunque per aver spiegato la causa! – musoNic80

0

E' strano, sta funzionando corretto qui. Quando provo con una stringa the cat walks e anche solo the lo farò e non produrrò un errore. L'ho emesso con print_r

Qual è il tuo $fullname come quando ricevi l'errore?

+0

con print_r sto ottenendo un array normale .. – Ben

4

BTW, quell'algoritmo non funzionerà sempre. Pensate a due parole nomi cognomi Latina o italiani come "De Castro", "Dela Cruz", "La Rosa", ecc Split tornerà 3 invece di 2 parole:

Array { 
    [0] => 'Pedro' 
    [1] => 'De' 
    [1] => 'Castro' 
} 

vi ritroverete con messaggi come "Bentornata Ana De" o "Modifica del profilo di Monsour La".

stessa cosa accadrà per i nomi di due parole come "Anne Marie Miller", "William Howard Taft", ecc

Solo un consiglio.

Problemi correlati