【问题标题】:Split a full name using PHP list or explode function使用 PHP 列表或分解函数拆分全名
【发布时间】:2024-05-23 23:45:02
【问题描述】:

我正在尝试使用简单的 HTML DOM 拆分我从网页中提取的名称,而 list 和 explode 函数并没有起到作用。我想做的就是取一个名字 {firstname middle(optional) lastname} 并将它们拆分。中间名只出现在一些名字上,如果我能处理好,那将是一个奖励。

代码如下:

    <?php

    $data = new simple_html_dom();  
    $data->load_file("http://www.ratemyprofessors.com/ShowRatings.jsp?tid=861228");
    $profName= $data->find("//*[@id=profName]", 0);
    $profName = strip_tags($profName);
    echo "Full Name: " . $profName = trim($profName);
    list($first, $last) = explode(' ', "$profName ");
    echo "first name: " .  $first;
    echo "last name: " . $last;
?>

我的输出如下:

Full Name: Jennifer Aaker
firstname: Jennifer Aaker
lastname: 

【问题讨论】:

  • "$profName " 是怎么回事?为什么是空间?
  • 我打算删除它,因为我认为字符串分隔符没有正确检测到空格,所以我自己添加了一个。

标签: php string explode


【解决方案1】:

尝试:

list($first, $last) = explode("&nbsp;", $profName);

【讨论】:

  • 效果很好。谢谢!我正在阅读浏览器上的输出并且不知道偷偷摸摸的  
  • 现在我需要处理函数来处理那个可选的中间名
【解决方案2】:

这里有一个简单的函数可以解决问题。

function first_last($s) {
    /* assume first name is followed by a whitespace character. take everything after for last. middle initial will be returned as part of last. */
    $pos = strpos($s,' ');
    if ($pos == FALSE) { // if space is not found... call if first name
        return array($s,''); 
    }
    $first = substr($s, 0 , $pos);
    $last = substr($s,$pos + 1);    
    return array($first,$last);
}

// test
$s2 = 'john stewart';
list($first,$last) = first_last($s2);

【讨论】: