PHP文字列の抜出に最適な関数とは

このQ&Aのポイント
  • PHPの文字列に関数が多く、どれが最適なのか迷っています。
  • 特定の文字列を抜き出すために、連想配列からカンマで区切った文字列に変換したいです。
  • 現在考えている方法以外に、効果的な関数や手法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

PHP 文字列のこの抜出に最適な関数とは

お世話になります。 表題の通りなのですが、PHPの文字列に関数が多いのでどれが最適なのか迷っています。 下記のhtmを連想配列で抜き出しています。 ------------------------------------ 【店舗情報】<br> ■店舗名『保険代理店A』東京中央店<br> ■取扱募集代理店株式会社ほけんプラプラ<br> ■所在地東京都中央区2-2 田中ビル5F<br> ■電 話0120-00-0200<br> ■開店日2011年3月1日(火)<br> ■営業時間10:00~18:00<br> ■対応コース来店<br> ------------------------------------ これをMySQL5のDBに入れるべくカンマで下記の様に区切ったものにしたいのです。 保険代理店A,東京中央店,株式会社ほけんプラプラ,東京都中央区2-2 田中ビル5F,0120-00-0200,2011年3月1日,10:00~18:00,来店 現在考えているのは、「■店舗名『」までをカンマに置き換え、次に「』」をカンマに置き換えてとアナログ的に問題をつぶしてい漢字で考えています。 それ以外の方法で、妙案があればお知恵をお借りしたいです、宜しくお願いします。

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

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

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

こちらに回答を追加しました。 http://okwave.jp/qa/q8365784.html

makino03
質問者

お礼

いつもいつもありがとうございます。解決しました。 他の質問でもTo_aru_Userさんの適切な答えに救われています。 もちろんベストアンサーです!

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

削除したい文字を配列で保持してstr_replaceで区切り文字に置換してしまえば、あとは分割するだけのように思えます。 <?php $str = '【店舗情報】<br> ■店舗名『保険代理店A』東京中央店<br> ■取扱募集代理店株式会社ほけんプラプラ<br> ■所在地東京都中央区2-2 田中ビル5F<br> ■電 話0120-00-0200<br> ■開店日2011年3月1日(火)<br> ■営業時間10:00~18:00<br> ■対応コース来店<br>'; $rep = array('【店舗情報】', '■店舗名', '『', '』', '■取扱募集代理店', '■所在地', '■電 話', '■開店日', '■営業時間', '■対応コース', '<br>', "\r", "\n"); $arr = array(); $str = str_replace($rep, "\t", $str); foreach (explode("\t", $str) as $val) { if ($val !== '') $arr[] = $val; } print '<pre>'; print_r($arr); print '</pre>'; スクリプトからデータベースに入れるならCSVなどにせず配列のまま扱う方が楽ですし、CSVとしてファイルに書き出すなら(配列を)fputcsvで書き出すべきです。「正しいCSV」を生成するのはけっこう面倒なので。

makino03
質問者

お礼

ありがとうございます、参考になりました

関連するQ&A

  • cURL から特定の文字列を抜き出したい

    あるページから、店舗名や住所、ある一定の文字列を抜き出したいのですがうまくいきません。 抜き出したいページには以下のような情報が書き込まれており、新店舗が出来ると更新されます。 ------------------- 写真や店舗紹介ページにあるような部分 【店舗情報】 ■店舗名 『保険代理店A』東京中央店 ■取扱募集代理店 株式会社ほけんブラブラ ■所在地 東京都中央区2-2 田中ビル5F ■電 話 0120-00-0200 ■開店日 2013年3月1日(火) ■営業時間 10:00~18:00 ■対応コース 来店 ------------------- 上記の7項目は絶対に変化なくページに存在しています。 そのページをcurlで取得し、一定の処理をします。 現在書けているのプログラム function curl_get_contents( $url, $timeout = 60 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; } $result = curl_get_contents( "http://example.com?id=16", 120 ); $do = mb_strpos($result, "■"); echo $do; --------------------- 最初の■からの文字列は取得できるのですが、そこからの処理が分かりません。 できたら、連想配列に格納したいのです。 どうか諸先輩方のお知恵をお借り出来たらと存じます。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 住所データの編集の仕方

    エクセルで下記のような編集をしたいんですが、 関数を教えて頂けないでしょうか? 例)神奈川県横浜市西区中央1-1-1 中央ビル1F 東京都中央区丸の内1-1-1 丸の内1F     A        B        C         D 1  神奈川県  横浜市西区  中央1-1-1   中央ビル1F 2  東京都   中央区    丸の内1-1-1   丸の内1F A 都道府県 B 市町村区 C 番地等 D ビル名 このように分けるにはどうしたら良いでしょうか? 困ってます。お力添え宜しくお願い致します。

  • Excelの結合でA列とB列の内容を結合したいのですが

    A列とB列を結合しますと、B列のデータがなくなってしまい、A列のデータのみとなってしまいますが 具合の良い方法ありますでしょうか。 行数が沢山あるものですから。 例: A列に東京都中央区銀座 B列に8-5-6 ××ビル5階 これを結合して 東京都中央区銀座8-5-6 ××ビル5階 にしたいのです。 初心者です宜しくお願い致します。

  • エクセルで 特定の記号に挟まれた文字列を取り出す

    csvファイルのデータですが "東京都""渋谷区""渋谷""1-1-1""渋谷ビル2F""ICHIRO.YAMADA" となっている データがあります。 一番後ろの ICHIRO.YAMADA の 部分だけ取り出したいと思います。 よろしくお願いいたします。

  • ACCESS重複データの単一処理

    ACCESS重複データの単一処理 ACCESS重複データの処理 下記ようなデータ TEL         社名            住所                FAX 0312345678    田中産業株式会社   東京都新宿区大久保1234   0312349876 0612345678    佐藤商店         大阪市中央区南船場 001   0612346789 0312341234    田中産業株式会社   東京都新宿区大久保1234   0312349999 0612343456    佐藤商店         大阪市中央区南船場 001   0612346666 1行目と3行目、2行目と4行目は同じ会社です。各会社は1行ずつ抽出したいです。 例: 0312345678    田中産業株式会社   東京都新宿区大久保1234   0312349876 0612345678    佐藤商店         大阪市中央区南船場 001   0612346789 重複判断基準は、社名と住所。抽出したデータはすべて項目を含める。重複しないデータはどれでも結構です。よろしくお願いします。

  • 【エクセル】長い住所を2行に分ける関数【画像あり】

    タイトルの件、質問いたします。 下記の画像のA1セルに 東京都江戸川区A町x-xx-x xxxxxxxxビル2F と入力されています。【住所とビルの名前の間には、スペースがあります。】 同住所を A2セルと、B3セルに下記のとおり、振分ける事はできないでしょうか? A2セル 東京都江戸川区A町x-xx-x B3セル xxxxxxxxビル2F ご存知の方、いらっしゃいましたら、宜しくお願いします。

  • エクセルで縦並びのデータを横1本にしたい

    楽天RMS等でよくあるデータの形ですが下記の様なデータを横並びにまとめたいと考えています。 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 すごい石鹸A 1個 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 ミラクルシャンプー 1個 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 ミラクルリンス   2個 何か良い手はありませんでしょうか。 こんなイメージです。  ↓ 150-0001 東京都渋谷区神宮前番地 山田ビル1F 山田太郎 00-0000-0000 すごい石鹸A 1個  ミラクルシャンプー 1個 ミラクルリンス   2個 よろしくお願い致します。

  • 御中の使い方

    先方の企業に郵便を出すときに 東京都**区**町1-45-5 ABCビル3F 株式会社チョメチョメ 山田様 と出すときに 御中っているんですか? また、どこに入れるのですか

  • 履歴書の封筒の書き方

    たとえば、サイトの履歴書送付先に 〒111-1111 東京都丸々区丸々1-1-1 丸々ビル 丸々バンク株式会社  担当 : 佐藤・中村 宛 と書いてあった場合、封筒にはどのように書けばいいのでしょうか? 「〒111-1111 東京都丸々区丸々1-1-1 丸々ビル」は右側 「丸々バンク株式会社  担当 : 佐藤・中村 宛」は中央でいいのですか? また、「担当 : 佐藤・中村 宛」をそのまま書いていいのですか? 「担当 : 佐藤・中村 様」 とか 「担当 : 佐藤・中村 御中」に直すのでしょうか? よろしくお願いします

  • 指定文字列から指定文字列までの抽出

    EXCEL、Wordでも何でもいいのですが、 指定文字列から指定文字列までを抽出したいです。 そのほかを削除するという考えでも良いです。 ビジネス文書ではないですが、 例としてビジネス文書を使います。 例) ☆平成○年○月○日 ☆ ☆○○食品☆ 株式会社 営業部課長 ○岡 ○冶 様 ☆株式会社 □□企画☆ 取締役 □川 □子 本社移転のお知らせ  謹啓 向春の候 貴社におかれましては益々ご清栄のこととお慶び申し上げます。平素より格別のご愛顧を賜り、誠に有難うございます。 ☆ さて、この度弊社では業務拡張のため、平成◯年◯月◯日より下記住所に移転することとなりました。☆  これを機に、一層のサービス向上に努めるべく、社員一同気持ちをあらたにしております。  今後ともご愛顧のほど宜しくお願い申し上げます。 謹白 記   旧)  〒△△△ 東京都△△区△△町1-2-3         電話 △△△ FAX △△△   ☆新)  〒△△△ 東京都△△区△△町4-5-6         電話 △△△ FAX △△△☆   平成○年○月○日より、新社屋にて営業を開始いたします。 以上 のようなとき、 ☆と☆の間を抜き出したいのです。 上の文書だと、 平成○年○月○日 ○○食品 株式会社 □□企画 さて、この度弊社では業務拡張のため、平成◯年◯月◯日より下記住所に移転することとなりました。 新)  〒△△△ 東京都△△区△△町4-5-6         電話 △△△ FAX △△△ という形で抜き出せます。 マクロで自動登録をし、 1行ずつ削除していく方法も考えたのですが 必要な部分まで消してしまうことが多く、うまくいきませんでした。 逆の考えで、 ☆と☆の間以外を削除し、 空白のセルを消すというのでも構いません。 分かりにくい説明で申し訳ありませんが、 宜しくお願いいたします。

専門家に質問してみよう