【问题标题】:Laravel 5.2 Split String First Name Last NameLaravel 5.2拆分字符串名字姓氏
【发布时间】:2016-11-11 02:38:27
【问题描述】:

我有一个从全名表单传递过来的字符串。

在我的数据库中,我存储了名字和姓氏。我使用以下方法拆分了字符串:

$name = explode(" ", $request->name);
$lastname = array_pop($name);
$firstname = implode(" ", $name);

这很好用,但是,如果用户没有在字段中输入姓氏,则上述内容将不起作用,因为姓氏会成为第一个。

我错过了什么吗?

【问题讨论】:

  • 强制用户输入first_namelast_name,并按原样存储。当您想返回full_name 时,只需返回$first_name." ".$last_name。与依赖用户提供正确信息或假设名称不包含空格相比,串联是更好的解决方案。
  • 我同意@TimLewis。但是,在某些情况下,例如注册过程,您希望将用户需要填写的字段数量降至最低。在这种情况下,IMO 可以“猜测”哪个部分是名字和姓氏,但将它们分开存储,并让用户有机会稍后单独编辑它们。
  • @Dencker Fair 关于保持简单的主题。对于 90% 的情况,名称中没有空格,可以假设,但了解并尝试考虑边缘情况仍然很好,例如某人的名字类似于“玛丽安”。

标签: php arrays laravel laravel-5


【解决方案1】:

这是我用来拆分名字的方法:

$splitName = explode(' ', $name, 2); // Restricts it to only 2 values, for names like Billy Bob Jones

$first_name = $splitName[0];
$last_name = !empty($splitName[1]) ? $splitName[1] : ''; // If last name doesn't exist, make it empty

【讨论】:

  • 这里不考虑中间名大小写
  • 不,正如 cmets 所说,只有 2 个值,因为请求是第一个和最后一个。这并不准确,所以像 Mary Jane Watson 这样的名字将变成“Mary”“Jane Watson”。但仅使用代码很难预测名称拆分。
【解决方案2】:

我通常这样做,这与您所做的非常相似(使用array_shift而不是array_pop):

$split = explode(" ", $request->name);

$firstname = array_shift($split);
$lastname  = implode(" ", $split);

适用于单个名称、多个名称和空字符串。没有条件。

【讨论】:

    【解决方案3】:

    这是我喜欢做的事情:

    $firstname = explode(' ', trim($fullname))[0];
    

    或使用 laravel 助手 head

    $firstname = head(explode(' ', trim($fullname)));
    

    或者如果您确定全名不为空:

    $firstname = strtok(trim($fullname),  ' ');
    

    【讨论】:

      【解决方案4】:

      我认为它看起来不错:)

      list($firstName, $lastName) = array_pad(explode(' ', trim($fullName)), 2, null);
      

      【讨论】:

        【解决方案5】:

        请尝试以下方法。

        $list = list($firstName, $lastName) = array_pad(explode(' ', 
            trim($name)), 2, null);
        
        print_r([
            'firstname' => trim(str_replace($list[(count($list)-1)],"",$name)),
            'lastname' => $list[(count($list)-1)]
        ]);
        

        【讨论】:

          猜你喜欢
          • 2020-12-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-21
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 2013-03-26
          • 1970-01-01
          相关资源
          最近更新 更多