名前を姓と名に分割するためのphp explode()
関数の非常に単純な使用であると私が思ったことを書きました:
// split name into first and last
$split = explode(' ', $fullname, 2);
$first = $split[0];
$last = $split[1];
ただし、これにより"Undefined offset: 1"
というメッセージとともにphpエラーがスローされます。関数はまだ機能しているようですが、エラーの原因を取り除きたいと思います。 php manual を確認しましたが、これらの例では上記と同じ構文を使用しています。私は未定義のオフセットが何であるかを理解していると思いますが、コードがエラーを生成している理由がわかりません!
これは、フルネームにスペースが含まれていないためです。簡単なトリックを使用して、スペースが常にどこにあるかを確認できます
$split = explode(' ', "$fullname ");
(引用符内のスペースに注意してください)
ところで、list()関数を使用してコードを簡略化できます
list($first, $last) = explode(' ', "$fullname ");
これは、$fullname
にスペース文字が含まれていないことが原因である可能性があります。
この例では、この通知を表示せずに問題を修正する必要があります。
$split = explode(' ', $fullname, 2);
$first = @$split[0];
$last = @$split[1];
$fullname
が"musoNic80"
の場合、通知メッセージは表示されません。
"@"
文字の使用に注意してください。
HTHエリアス
ところで、そのアルゴリズムは常に機能するとは限りません。 「De Castro」、「Dela Cruz」、「La Rosa」などの2語のラティーナまたはイタリア語の姓の名前を考えてみてください。Splitは2語ではなく3語を返します。
Array {
[0] => 'Pedro'
[1] => 'De'
[1] => 'Castro'
}
「Welcome back Ana De」や「Editing Profile of Monsour La」などのメッセージが表示されます。
「アンマリーミラー」、「ウィリアムハワードタフト」などの2語の名前でも同じことが起こります。
ほんのヒント。
$split = array_pad(explode(' ', $fullname), 2, null);
explode
は、文字列を制限なく配列に分割します。array_pad
のエントリがarray_pad
未満の場合、2
は分解された配列にnull
の値を入力します。array_pad を参照
おそらく、何でも$fullname
にはスペースが含まれないため、$split
は単一の要素を含む配列なので、$split[1]
は未定義のオフセットを指します。
_array_pad
_は、このスレッドで唯一有効な回答です。他のすべては、あなたの顔に爆発する可能性がある醜いハックです。 _array_pad
_を使用すると、要素の量が正しく入力されていることを常に確認できます。 list()
タイプの出力で使用する場合は特に重要です。
奇妙なことですが、ここでは正しく機能しています。文字列the cat walks
だけでなく、the
を使用してもエラーは発生しません。 print_r
で出力しました
エラーが発生した場合、$fullname
はどのように見えますか?