0

我正在列出姓名并将姓氏放在第一位。当我使用explode创建$name数组时,名字的名字在数组位置0,姓在位置1,但其他名字都以名字在位置1,姓在位置2。

我从另一个执行类似操作的脚本中复制了这段代码,但在该代码中,所有的名字,包括第一个实例,都从数字 1 开始(至少是一致的)。

我猜我错过了一些基本的东西。感谢您的帮助。

代码如下。

$_511a = 'Maria Smith, Lance Farquardt, Daniel Berquist, John Barton, Milo Silver';
echo '511a: ' . $_511a . '<br />';
$castsplit = explode(',' , $_511a);
foreach($castsplit as $cast) {
    $name = explode(' ',$cast);
    $lastname = end($name);
    if(count($name) >= 4){
        $middlename = $name[2];
    } else {
        $middlename = null;   
    }
    $firstname = $name[1];
    if($middlename){
        $castmembers[] = $lastname . ', ' . $firstname .  ' ' . $middlename;
    } else {
        $castmembers[] = $lastname . ', ' . $firstname;
    }
}
echo "Corrected names: <br />";
foreach($castmembers as $castmember) {
    echo $castmember . '<br />';
}
4

4 回答 4

3

在列表中的第一个名字之后,所有名字前面都有一个空格。explode()计算该空间,在结果数组的 0 索引中放置一个空白字符串。

改变:

$name = explode(' ',$cast);

到:

$name = explode(' ',ltrim($cast));
于 2012-11-14T18:26:12.227 回答
2

问题是名称之间的逗号后有空格。要么只使用“,”或“,”作为分隔符,要么使用正则表达式来分割字符串。

$castsplit = preg_split('/,\s*/', $_511a);

以上将接受所有与此类似的分隔符:<comma><zero or more spaces>.

于 2012-11-14T18:29:18.990 回答
0

尝试一下:

$castsplit = explode(", ", $_511a);

//your variable name cast is ambiguous.  I changed it
foreach($castsplit as $member) {
  $nameArr = explode(' ', $member);
  $first = $nameArr[0];
  $last = end($nameArr);
  str_replace($first, $last, $member, 1);
  str_replace($last, $first, $member, 1);

  echo $member;
}

注意第一个爆炸中逗号后的空格

于 2012-11-14T18:36:43.870 回答
0

字符串 '$_511a' 之间有空格,因此explode 函数也必须有空格。所以 $name 的索引也会改变,因为现在我们在 0 索引上的第一个元素。

更改代码

$castsplit = explode(',' , $_511a);

$castsplit = explode(', ' , $_511a);

$firstname = $name[1];

$firstname = $name[0];
于 2012-11-14T18:39:52.097 回答