0

長い文字列から名前とメールのペアを区切る際に区切り文字としてコンマを使用する関数があります。この関数を変更して、コンマの代わりに改行が使用されているかどうかを検出できるようにしたいと思います。変更が必要な関数は次のとおりです。

$str = '"Fname Lname" <abc@email.com>, abc@gmail.com';
$pairs = explode( ",", $str );
foreach( $pairs as $pair ) {
  if( strpos($pair, '<') ) {
    $output = explode( "<", $pair );
    $output['0'] = trim( str_replace( "\"", "", $output['0'] ) );
    $output['1'] = trim( rtrim( $output['1'], ">" ) );
  } else {
    $output = array();
    $output['0'] = '';
    $output['1'] = $pair;
  }
  print_r($output); // Save it to database here
}

file()関数の使用を提案する投稿を見つけましたが、これら2つを組み合わせる方法がわかりません。

$str = '"Fname Lname" <abc@email.com>, abc@gmail.com';
$pairs = file($str, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
4

2 に答える 2

1

phpの真の改行は。として記述され"\n"ます。単に使用する

$pairs = explode( "\n", $str );

\の動作が変更されるため、n改行されることに注意してください。"\n"出力として与える間、素晴らしいラインを"\\n"与え\nます。

于 2012-05-20T15:02:41.050 に答える
1

これを試して、改行に変換してから、存在するかどうかを確認してください

$str=nl2br($str);
if (strpos($str,'<br />')!==false){
$pairs = array_filter(explode( "<br />", $str ));
}

または、改行をキャッチする必要があるスペースで分割することもできます

if (strpos($str,' ')!==false){
$pairs = array_filter(explode( " ", $str ));
}

ノート; 空の値が削除されるため、array_filterを追加しました。また、データベースに追加する前に、ここhttp://php.net/manual/en/filter.filters.validate.phpからFILTER_VALIDATE_EMAILを使用することをお勧めします。

于 2012-05-20T15:00:31.747 に答える