20

私はexplode()、名前を姓と名に分割する php 関数の非常に単純な使用法だと思ったものを書きました。

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

ただし、これはメッセージでphpエラーをスローしています"Undefined offset: 1". 関数はまだ機能しているようですが、エラーの原因を解決したいと思います。PHP マニュアルを確認しましたが、その例では上記と同じ構文を使用しています。未定義のオフセットが何であるかは理解していると思いますが、コードでエラーが発生する理由がわかりません!

4

7 に答える 7

50

これは、フルネームにスペースが含まれていないためです。簡単なトリックを使用して、スペースが常にどこにあるかを確認できます

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

(引用符内のスペースに注意してください)

ところで、 list() 関数を使用してコードを簡素化できます

  list($first, $last) = explode(' ', "$fullname ");
于 2009-11-27T10:18:22.810 に答える
5

$fullnameこれは、スペース文字が含まれていなかったことが原因である可能性があります。

この例では、この通知を表示せずに問題を解決する必要があります。

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

これで、通知メッセージ$fullname"musoNic80"表示されなくなります。

"@"文字の使用に注意してください。

HTH エリアス

于 2009-11-27T10:16:56.123 に答える
4

ところで、そのアルゴリズムは常に機能するとは限りません。「DeCastro」、「Dela Cruz」、「La Rosa」など、2語のラティーナまたはイタリア語の名前を考えてみてください。Splitは2語ではなく3語を返します。

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

「WelcomebackAnaDe」や「EditingProfileofMonsourLa」などのメッセージが表示されます。

「アン・マリー・ミラー」、「ウィリアム・ハワード・タフト」などの2語の名前でも同じことが起こります。

ちょっとしたヒント。

于 2011-04-14T05:46:13.037 に答える
3

おそらく、$fullnameスペースが含まれていないものはすべて$split、単一の要素を含む配列であるため$split[1]、未定義のオフセットを参照しています。

于 2009-11-27T10:16:36.887 に答える
1

それは奇妙です、それはここで正しく機能しています。the cat walks文字列を試してみるとthe、エラーは発生しません。で出力しましたprint_r

エラーが発生したとき、あなたはどの$fullnameように見えますか?

于 2009-11-27T10:17:38.590 に答える