文字列を分解して配列に格納する方法について

このQ&Aのポイント
  • 文字列を分解して配列に格納する方法について具体的な例を挙げて説明します。
  • 変更前の文字列を変更後の形式に変換する手順についてまとめます。
  • PHPを使用して変更前の文字列を変更後の形式に分解して配列に格納する方法を示します。
回答を見る
  • ベストアンサー

文字列を分解して配列に格納する方法について

下記の変更前の文字列を、変更後のようにしたいと思ったのですが、どのようにすればそのような事ができるのかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 <?php // 変更前 $string = "名前1 <メールアドレス1>,メールアドレス2, 名前3<メールアドレス3>"; // 変更後 $array[0][0] = "名前1" $array[0][1] = "メールアドレス1" $array[1][0] = "空白(もしくはメールアドレス2)" $array[1][1] = "メールアドレス2" $array[2][0] = "名前3" $array[2][1] = "メールアドレス3" ?> 以上、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

一人一人の値は","で区切られている保証はありそうなので $temp = explode (",", $string); $temp[0] = "名前1 <メールアドレス1>" $temp[1] = "メールアドレス2 $temp[2] = "名前3<メールアドレス3>" となります。ただし、この$tempを見ると、 •要素数に保証が無い •アドレスが"<>"で囲まれる保証が無い と見受けられます。 要素が二つ存在するかの判断を"<"の有無で行う。 要素が二つの場合は"<"前を名前、以降をメアドと判断する。 要素が一つの場合は強制的にアドレスと見なす。 と想像すると $string = "名前1 <メールアドレス1>,メールアドレス2, 名前3<メールアドレス3>"; $temp = explode (",", $string); foreach ($temp as $key => $one_list){ if(preg_match("/</", $one_list)){ list($name, $mail_add) = explode ("<", $one_list); $last_array[$key][0] = $name; $last_array[$key][1] = preg_replace ("/>/", "", $mail_add); }else{ $last_array[$key][0] = ""; $last_array[$key][1] = $one_list; } } と、こんな感じでできるかと。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたソースに一部 trim を付加すれば、 意図した動作になりそうでした。 それと、入力値がどこまで保証されているか不明だった為、 その点については改めて検討してみたいと思います。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

その他の回答 (1)

  • kachansa
  • ベストアンサー率44% (30/67)
回答No.1

まずは、explodeでカンマ区切りを配列化 $array[i]="名前 <メールアドレス>" あとは、 ループで$array[i]でpreg_matchの正規表現で マッチさせるかな。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご意見参考にさせていただきます。 以上、よろしくお願いします。

関連するQ&A

  • 文字列の分解・格納

    お世話になります。 文字列の分解についてお聞きします。 環境はVB.NET2008です。 Private Sub Main(ByVal CmdArgs() As String) Dim cmds() As String cmds = System.Environment.GetCommandLineArgs() End Sub コマンドライン引数で以下のように文字列を取得しています。 ("起動exe", "/KEY=○○○/ テーブル名=△△△") この文字列を元に、 変数Aに○○○を変数Bに△△△を代入したいのですが、どうやるのでしょうか? ご教示願います。

  • 文字列を配列にしたい

    お世話になります。 PHP4.3.9を利用しているのですが、以下のような文字列を分割して、求める形の配列に入れたいのですが、何か良い方法はありますでしょうか? ■文字列 abc=123&def=456&ghi=789 ■このような形にしたいと思っています↓ $hoge = array(   "abc"=>"123",   "def"=>"456",   "ghi"=>"789" ) ヒントだけでも結構ですので、ご教示いただけると幸いです。宜しくお願いします。

    • ベストアンサー
    • PHP
  • ある文字を含む文字列のみ配列にする方法

    var_dump($text); を行うと array(1) { [0]=> string(XX) "あいさつ" } array(1) { [0]=> string(XX) "いい日旅立ち" } array(1) { [0]=> string(XX) "りんご、うまい" } array(1) { [0]=> string(XX) "メロン好き" } …… となるような変数 $text があり、そこから $key = array("ばなな","りんご","メロン"); の配列内にある文字列を含むものだけを新たに格納したいです。 自分では foreach($text as $value){ if(in_array($value, $key)){ $key_text[] = $value; } } と書いて試したのですが、NULLと返ってきてしまいます。 どうやって書けばいいか教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ある文字を含む文字列のみ配列にする

    何度もすみません。 array(XX) { [0]=> array(2) { ["text"]=> string(YY) "りんご美味しい" ["name"]=> string(Z) "あいこ" } [1]=> array(2) { ["text"]=> string(XX) "富士山登りたい" ["name"]=> string(Z) "みほ" } [2]=> array(2) { ["text"]=> string(XX) "動物園行きたい" ["name"]=> string(Z) "なほ" } [3]=> array(2) { ["text"]=> string(XX) "メロン美味しい" ["name"]=> string(Z) "ゆい" } [4]=> array(2) { ["text"]=> string(XX) "お腹すいた" ["name"]=> string(Z) "まこ" } [5]=> array(2) { ["text"]=> string(XX) "数学やだー" ["name"]=> string(Z) "あいこ" } ……… } のような配列$textがあり、そこから["text"]に $keyword = array("りんご","メロン") の文字列を含むものだけ取り出したいです。 今までもらった回答を参考に $key_text = array(); foreach($text as $key => $v1){ foreach($keyword as $v2){ if(strpos($v1[text], $v2) !== false){ $key_text[] = $key; } } } と書いてみたのですが、上手く動作しません。 よろしければどこが間違っているかご指摘ください。 お願いします。

    • ベストアンサー
    • PHP
  • エクセルの文字列分解

    住所録なのですが、A列に文字列で"(1)氏名(2)住所(3)電話番号(4)メールアドレス"とあります。これをB~E列に分解したいです。A列の共通の文字は(1)(2)(3)(4)です。 現状 A (1)氏名(2)住所(3)電話番号(4)メールアドレス 変更後 B     C     D       E 氏名   住所   電話番号   メールアドレス よろしくお願いします。

  • 可変長の配列要素を文字列に代入する方法

    ちょっとしばらくPHPやってなかったもので、へんなことで悩んでいます。 配列要素が固定長の場合、 <?php $a = array(1, 2, 3); //固定長3の場合 $data = "$a[0], $a[1], $a[2]"; //文字列$dataに配列要素を代入 ?> と簡単にできてしまいますが、 $aが可変長の配列であった場合にも同様の事がやりたいのですが、 この場合、PHPの記述としてはどう書くのがベストなのでしょうか? 御教示ください。

    • ベストアンサー
    • PHP
  • 文字列を取り出す。

    文字列で一行の中に ********* ******** *********** ********* のように間に空白の入っている文字列が あるのですが、 これの2番目をとってくるようにしたのですが、 良い方法が思い浮かびません。 Stringクラスのメソッドを見ているのですが、、、 お願いします。

    • ベストアンサー
    • Java
  • 文字列と文字列をつなげるには

    下記のようにプログラムを作りました。 簡略しているのでわかりづらいと思いますが、 文字の配列と文字の配列を文字の配列に格納したいので、 下記のように$arrayに”.=”として文字列を加えて いますが、うまくいきません。 どのようにしたらいいのでしょうか? ご教授お願いいたします。 while($text[$i] != ""){ if($i==1){ $array[$j] = $feild[$j]; $array[$j] .= " "; $array[$j] .= substr($text[$i], $no, $pos); } }

    • ベストアンサー
    • PHP
  • VBA(EXCEL2000) 配列に文字列を格納する方法

    VBA(EXCEL2000) 配列に文字列を格納する方法 VBAを使用している初心者です。 文字列の配列宣言と同時にデータを格納する方法を教えて下さい。 '/----現在のコード-----------------------------/ Dim member(47) As String member(1) = "北海道" member(2) = "青森県" member(3) = "岩手県" '(途中略) member(46) = "鹿児島県" member(47) = "沖縄県" '/--------------------------------------------/ 下記のようなコードは実現可能でしょうか? Dim member() As String = {"北海道", "青森県", "岩手県",(途中略), "鹿児島県", "沖縄県"}

  • 配列で文字列の切り取り[JavaScript]

    配列で文字列の切り取りという言葉が正しいがどうかはわかりませんが、 以下のような配列があるとします。 var array1 = ["xx10","xx11","xx12","xx13"]; これを、下記のように"xx"だけを切り取って、新たな配列として生成できるでしょうか? var array2 = ["10","11","12","13"]; 宜しくお願いします。

専門家に質問してみよう