Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拆分字符串First和Lastname(大写和小写)_Php_Regex_Explode_Uppercase_Lowercase - Fatal编程技术网

Php 拆分字符串First和Lastname(大写和小写)

Php 拆分字符串First和Lastname(大写和小写),php,regex,explode,uppercase,lowercase,Php,Regex,Explode,Uppercase,Lowercase,要在mysql数据库中保存名字和姓氏,我需要拆分字符串。 上面你可以看到一些例子 拆分此字符串的最佳方法是什么?请注意,姓氏是大写的 结果应该是: 结果1:约翰·法默 结果组2:Rafa OVERMARS DE 结果三:Dick VAN DER腰带遵循以下步骤: 显示空格时将字符串转换为数组 使用弹出最后一个数组元素(显然是第一个名称) 使用在前面插入弹出的名称 将数组转换回字符串 <?php $string1 = "FARMER John"; $string2 = "OVERMARS D

要在mysql数据库中保存名字和姓氏,我需要拆分字符串。 上面你可以看到一些例子

拆分此字符串的最佳方法是什么?请注意,姓氏是大写的

结果应该是:

结果1:约翰·法默

结果组2:Rafa OVERMARS DE


结果三:Dick VAN DER腰带

遵循以下步骤:

  • 显示空格时将字符串转换为数组
  • 使用弹出最后一个数组元素(显然是第一个名称)
  • 使用在前面插入弹出的名称
  • 将数组转换回字符串

    <?php
    $string1 = "FARMER John";
    $string2 = "OVERMARS DE Rafa";
    $string3 = "VAN DER BELT Dick";
    ?>
    

  • 这真是个坏主意

    如果你纯粹依靠字母大小写来表示某事,那么会有大量的事情出错。把这些都保存在另一个字符串中只会使问题永久化

    也就是说,您可以通过单独存储新值来减轻(少量)不利影响,这样就不会将非结构化信息传递给下一个不得不维护您的数据库的不幸的人。这段代码做到了这一点,同时还允许使用多个单词的名字(如“John Paul”之类)

    我还让它以数组形式处理这些名称,因为我假设您可能需要处理三个以上的名称

    $arr = explode(" ", $string3);
    $last_word = array_pop($arr);
    $final_string = ucfirst($last_word)." ".strtoupper(implode(" ", $arr));
    echo $final_string;
    

    正如其他人所说,您的问题描述相当模糊。但是,对于这样的固定模式,您可以通过正则表达式很好地拆分名称(因为姓氏总是大写):

    
    

    查看一个工作列表(加上)。

    最好的方法是首先不要将名字和姓氏放在同一个字符串中。第二个最好的方法是阅读并展示您迄今为止所做的尝试。我只是建议您使用两个输入,如@franzgleichman已经说过的,有时您必须处理列中的现有数据库表。很明显,当你用值开始一个数据库时,你先把它们分开。如果这个人有两个名字呢?像“盖茨比利威廉”那样,根据所提到的场景,它会把它转换成“William GATES BILLY”。问题是什么决定了它是第一个/最后一个名字。如果代码当前不考虑这个情况,它只需要输入你的输入字符串,例如“GATES Billy William”。将字符串转换成所需的场景,即William GATES BILLY,现在是你的情况,如果一个人有两个名字,那么这就是人为错误。实际上,有两个名字是很常见的。我不认为这是个错误。
    $arr = explode(" ", $string3);
    $last_word = array_pop($arr);
    $final_string = ucfirst($last_word)." ".strtoupper(implode(" ", $arr));
    echo $final_string;
    
    <?php
    
    $string1 = "FARMER John";
    $string2 = "OVERMARS DE Rafa Dafa";
    $string3 = "VAN DER BELT Dick";
    $strings = array(array('orig'=>$string1), array('orig'=>$string2), array('orig'=>$string3));
    foreach($strings as $key=>$val){
        $oldwords = explode(' ',$val['orig']);
            foreach($oldwords as $word){
                if(preg_match('/[a-z]/',$word)){
                  $firstname .= " ".$word;
                }else{
                  $lastname .= " ".$word;
            }
        }
        $firstname = trim($firstname);
        $lastname = trim($lastname);
        $strings[$key]['newfirst'] = $firstname;
        $strings[$key]['newlast'] = $lastname;
        $firstname = "";
        $lastname = "";
    }
    print_r($strings);
    
    ?>
    
    <?php
    $strings = array("FARMER John", "OVERMARS DE Rafa", "VAN DER BELT Dick");
    
    $regex = '~^([A-Z ]+\b)(\w+)$~';
    
    foreach ($strings as $string) {
        if(preg_match($regex, $string, $match)) {
            $surname = trim($match[1]);
            $forename = trim($match[2]);
            echo "Surname: $surname, Forename: $forename\n";
        }
    }
    
    ?>