1

変数 $name の最初の文字を分割する必要があります。どうすればそれを行うことができますか?

$name = $userData['name'];

最初の文字を取得するにはどうすればよいですか?

それが正しいかどうかを確認してください:

if($userData['gender'] == 'male'){
    if($firstletter=='i'){
    $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][1]);
    }else{
          $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][2]);}
}else{
    if($firstletter=='i'){
    $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][1]);
    }else{
          $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][2]);}
}
4

4 に答える 4

8
$userData['name'][0]

文字列のオフセットは、配列のようにアクセスできます。これは、文字列が1 バイトのエンコーディングであると想定していることに注意してください。マルチバイトでエンコードされた文字列がある場合は、次のものが必要です。

mb_substr($userData['name'], 0, 1, 'UTF-8' /* (the correct encoding) */)
于 2012-12-13T11:21:00.993 に答える
3

重複した質問から移動しました。コードは若干異なりますが、同じ内容をカバーしています。

まず、文字列がどの言語 (ヘブライ語) であるかだけでなく、どの文字エンコーディングが使用されているかを知る必要があります。

入力が という変数内に$lettersあり、エンコーディングが UTF-8 であるとします。比較したい文字はא('HEBREW LETTER ALEF' (U+05D0)) です。

出荷する最初の崖は、UTF-8 以外のエンコーディングである可能性がある PHP スクリプト内に安全に UTF-8 表現を含めることです。

$compareLetter = "\xD7\x90"; // UTF-8 'HEBREW LETTER ALEF' (U+05D0)

次の崖は、入力から最初の文字を抽出することです。$compareLetterバイトサイズの定義からわかるように、 2 です。したがって、最初の 2 バイトを比較する必要があります。

$isSame = substr($letters, 0, 2) === $compareLetter;

その後、コードの残りの部分は同じままにすることができます (ただし、今のように合理化することもできます)。

$png     = $global['maleBackgroundImages'][4 + $isSame];
$picture = ImageCreateFromPNG($png);

完全なコード例:

...

$compareLetter = "\xD7\x90"; // UTF-8 'HEBREW LETTER ALEF' (U+05D0)

$isSame  = substr($letters, 0, 2) === $compareLetter;
$png     = $global['maleBackgroundImages'][4 + $isSame];
$picture = ImageCreateFromPNG($png);

文字エンコーディングに関する注意:

  • どの文字エンコーディングが使用されているかを知る: どこでも、次のような場所を含む
    • 入力文字列
    • PHPスクリプトファイル
    • 出力
  • エンコーディングに関して文字列データを扱います。

いくつかの追加メモ:

  • 使用前に変数を初期化します。
  • 単純な決定を下した場合、多くの場合、それを計算として表現できます。Booleanは integerおよびにtrue等しくなります。1false0
  • 多くの場合、 の数をif減らすと、コードが削減されます。これにより、エラーが少なくなります。
于 2012-12-13T12:23:05.407 に答える
2

配列構文を使用して文字列の最初の文字を取得できます!

$firstletter = $userData['name'][0];
于 2012-12-13T11:19:51.820 に答える
0

あくまでも補足回答です。

utf-8 文字列を使用してきちんとした 1 文字のアクセスが必要な場合は、次のようにすることができます。

$chars = preg_split( '/(?<!^)(?!$)/u', $userData['name'] );

echo $chars[0];
于 2012-12-13T12:43:53.040 に答える