PHP:将名称部分从名称解析器(theiconic)映射到vCard属性

PHP:将名称部分从名称解析器(theiconic)映射到vCard属性,php,parsing,vcf-vcard,Php,Parsing,Vcf Vcard,我面临着将名称数据字符串$realName转换为(正确的)vCard属性的情况 作为一个解析器,似乎最适合我的目的(这个库目前是维护的,经常被下载,并且已经考虑到了德语的特点) 源字符串$realName可以同时包含:个人或公司的名称。因此,其组件(从我的pov)可以分配给以下vCard属性: FN(新排列的字符串) N(姓;名;附加名;尊称前缀;尊称后缀) 昵称(很清楚) 组织机构 另一方面,名称解析器提供以下组件(或空字符串): 称呼(如先生、夫人、博士等) 名字 中间名 首字母(单个

我面临着将名称数据字符串
$realName
转换为(正确的)vCard属性的情况

作为一个解析器,似乎最适合我的目的(这个库目前是维护的,经常被下载,并且已经考虑到了德语的特点)

源字符串
$realName
可以同时包含:个人或公司的名称。因此,其组件(从我的pov)可以分配给以下vCard属性:

  • FN(新排列的字符串)
  • N(姓;名;附加名;尊称前缀;尊称后缀)
  • 昵称(很清楚)
  • 组织机构
另一方面,名称解析器提供以下组件(或空字符串):

  • 称呼(如先生、夫人、博士等)
  • 名字
  • 中间名
  • 首字母(单个字母,可能后跟一个点)
  • 昵称(括号、括号内的部分等)
  • 姓氏(即支持from、de等前缀)
  • 后缀(Jr、高级、三年级、博士等)
根据这一点,这是我迄今为止的映射:

    /**
     * get an array of name parts vCard property as key
     * 
     * @param string $realname
     * @return array
     */
    function getNameParts(string $realName)
    {
        $parser = new Parser();
        $nameParts = $parser->parse($realName);
        $salutation = $nameParts->getSalutation();
        $firstName  = $nameParts->getFirstname();
        $lastName   = $nameParts->getLastname();
        $middleName = $nameParts->getMiddlename();
        $nickName   = $nameParts->getNickname();
        $initials   = $nameParts->getInitials();
        $suffix     = $nameParts->getSuffix();

        if (!empty($firstName)) {
            $additionalName = implode(',', [$middleName, $initials]);
            $name = implode(';', [$lastName, $firstName, $additionalName, $salutation, $suffix]);
            $fullName = implode(' ', [$salutation, $firstName, $additionalName, $lastName]).', '.$suffix;  
        } else {
            $name = '';
            $fullName = $realName;
            $company = $realName;
        }

        return [
            'N'        => $name,
            'FN'       => $fullName,
            'NICKNAME' => $nickName,
            'ORG'      => $company,
        ]
    }

我不太熟悉美国/英国的名称组件规则、正确的分配和顺序(例如FN)。 我也不知道如何判断
$realName
代表的是公司名称还是个人

因此,我想知道是否有其他人也有同样的任务,并且可以看看这是否会朝着正确的方向发展


许多Thx

我为自己找到了令人满意的解决方案: 我希望其他人能使用它