【问题标题】:Best way to turn a string into 2 variables将字符串转换为 2 个变量的最佳方法
【发布时间】:2011-08-31 03:54:46
【问题描述】:

我在将字符串中的名字和姓氏解析为 2 个不同的变量时遇到了一些问题。

字符串始终采用以下格式:“Smith, John”或“Doe, Jane”

是否有一个函数可以将名字和姓氏拆分为 2 个不同的变量,例如...

$firstname = "John"
$lastname = "Smith"

【问题讨论】:

标签: php string variables


【解决方案1】:

像这样使用list 和explode:

list($firstname, $lastname) = explode(',', $yourString);

您可能需要使用 trim 从这些变量中删除任何空格。

【讨论】:

  • 那么您是否需要trim $firstname 来删除空格?
  • 好吧,这基本上就是我的意思:P
  • 只映射数组:array_map('trim', explode(',', $yourString));
  • 不应该是list($lastname, $firstname)吗?
  • @Rocket:没错,我并没有把命名约定放在那儿。认为它就像在巴基斯坦一样,例如名字,姓氏顺序:)
【解决方案2】:

explode() 根据另一个字符串拆分一个字符串并返回一个数组。

你可以这样做:

$name = "Smith, John";

$name_array = array();

$name_array = explode(",", $name);

【讨论】:

  • 你不需要$name_array = array();,它是多余的。
【解决方案3】:

我会为此使用正则表达式,这样输入中可能会有细微的变化(即“Smith, John”、“Smith,John”、“Smith, John”或“Smith,John”)

您可以对正则表达式 "\w([a-z]+)\w" 执行类似的操作,然后姓氏将是您的第一个匹配项,名字将是您的第二个匹配项。

【讨论】:

  • 或者你可以使用像/([a-z]+)\s?,\s?([a-z]+)/iideone.com/AX57U这样的正则表达式
  • 我会用 PREG_SPLIT_DELIM_CAPTURE 来研究 preg_split。查看 php 手册:php.net/manual/en/function.preg-split.php
  • 它有什么作用,为什么它在这里有帮助?
  • 我的错。我误读了 PREG_SPLIT_DELIM_CAPTURE 的文档。我认为您可以使用它将整个格式放入其中,然后将名称作为捕获组。 preg_split 从由提供的模式分隔的字符串中返回一个数组。如果您在模式中放置一个捕获组,它将与字符串中分隔的项目一起返回。
  • preg_split 与 explode 相同,只是它使用正则表达式。在这里,我想你可以做preg_split('/\s?,\s?/', $str);
【解决方案4】:
$name = "Smith, John";
$expl = explode(', ', $name);
$firstname = $expl[1];
$lastname = $expl[0];
echo $firstname.' '.$lastname;

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 2010-10-10
    • 2011-12-27
    • 2017-07-26
    • 1970-01-01
    • 2019-03-29
    • 2010-10-22
    相关资源
    最近更新 更多