我正在列出名字并将姓氏放在第一位。当我使用explode创建$ name数组时,第一个名称在数组位置0中具有第一个名称,在位置1具有最后一个名称,但是其他名称都以位置1的名字和位置2的姓氏开头。 / p>
我从另一个执行类似操作的脚本中复制了此代码,但在该代码中,所有名字(包括第一个实例)都从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 />';
}
答案 0 :(得分:3)
在列表中的第一个名称之后,所有名称前面都有一个空格。 explode()
计算该空格,在结果数组的0索引中放置一个空字符串。
变化:
$name = explode(' ',$cast);
要:
$name = explode(' ',ltrim($cast));
答案 1 :(得分:2)
问题是名称之间用逗号后的空格。可以使用“,”或“,”作为分隔符,也可以使用正则表达式来分割字符串。
$castsplit = preg_split('/,\s*/', $_511a);
上述内容将接受所有分隔符:<comma><zero or more spaces>
。
答案 2 :(得分: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;
}
注意第一次爆炸中逗号后面的空格
答案 3 :(得分:0)
字符串'$ _511a'之间有空格,因此explode函数也必须有空格。因此$ name的索引也将被更改,因为现在我们在0索引上有第一个元素。
更改代码
$castsplit = explode(',' , $_511a);
到
$castsplit = explode(', ' , $_511a);
和
$firstname = $name[1];
到
$firstname = $name[0];