0

名前のリストを取得し、姓を最初に付けています。分解を使用して $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

文字列 '$_511a' の間にスペースがあるため、爆発関数にもスペースが必要です。$name のインデックスも変更されます。これは、最初の要素が 0 インデックスにあるためです。

コードを変更

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

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

$firstname = $name[1];

$firstname = $name[0];
于 2012-11-14T18:39:52.097 に答える
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 に答える