質問

PHPの explode()関数を使用して、名前を前名と姓に分割する非常に簡単だと思ったことを書きました:

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

ただし、これは" Undefined offset:1" というメッセージを含むphpエラーをスローしています。この関数はまだ機能しているようですが、エラーの原因となっているものをすべて取り除きたいと思います。 phpマニュアルをチェックしましたが、例では次と同じ構文を使用しています。上記。 未定義のオフセットが何であるかは理解できたと思いますが、コードがエラーを生成している理由がわかりません!

役に立ちましたか?

解決

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

 $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'
}

「ようこそアナデへようこそ」のようなメッセージが表示されます。または「Monsour Laのプロファイルを編集する」。

「Anne Marie Miller」、「William Howard Taft」などの2語の名前でも同じことが起こります。

ちょっとしたヒント。

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

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

で出力しました

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top