foreach中的爆炸变量,但在第一个数组之后,数组从1开始而不是0

时间:2012-11-14 18:20:43

标签: php arrays foreach explode

我正在列出名字并将姓氏放在第一位。当我使用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 />';
}

4 个答案:

答案 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];