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]

字符串中的偏移量可以像数组一样访问。请注意,这假设您的字符串采用单字节编码。如果您有多字节编码的字符串,则需要:

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))。

第一个要发布的悬崖是在您的 PHP 脚本中安全地使用 UTF-8 表示,该脚本可能采用非 UTF-8 编码:

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

下一个悬崖是从输入中提取第一个字母。正如我们所知道$compareLetter的字节大小的定义是两个。所以我们需要比较前两个字节:

$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 脚本文件
    • 输出
  • 根据其编码处理字符串数据。

一些附加说明:

  • 使用前初始化变量。
  • 如果您有一个简单的决定,您通常可以将其表示为计算。布尔值等于true整数1false0
  • 减少ifs 的数量通常会减少代码。这可以帮助您减少错误。
于 2012-12-13T12:23:05.407 回答
2

您可以使用数组语法获取字符串的第一个字母!

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

这只是一个补充答案。

如果您想使用 utf-8 字符串进行整洁的单字符访问,您可以这样做:

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

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