PHP文字分割で配列に

このQ&Aのポイント
  • PHPで文字列を分割し配列する方法を知りたい。
  • ダブルクォーテーションの中にコンマがある場合の分割方法についての情報を探している。
  • MySQLサーバのバージョンは5.5.42で、PHPのバージョンは5.6.10です。
回答を見る
  • ベストアンサー

PHP 文字分割で配列に。

こんにちは。 先日よりPHPにて文字列を分割し配列する事に悩んでいます。 質問内容としましては、 $str = "文字","1,2,3","テキスト" を Array ( [0] => 文字" [1] => "1,2,3" [2] => "テキスト" ) の様に配列にしたいと思っています。 今までは、sprit(",", $str) で分割していましたが、PHP 5.3.0 で 非推奨となったことで explode(",", $str) に変更。 その後今回の様なデータは無く問題ありませんでしたが、新しくデータを読み込みした時、ダブルクォートの中にコンマがあり、 Array ( [0] => 文字" [1] => "1 [2] => 2 [3] => 3" [4] => "テキスト") と分割され、エラーとなりました。 色々、「Sprit」「PHP 分割 ダブルクォーテーション」等で検索しているにも関わらず、希望の情報がヒットしませんでした。 改善方法若しくは情報の記載されておりますサイトがあればご誘導いただければ幸いです。 初歩的な質問かと思いますが、お願い致します。 サーバの種類: MySQL サーバのバージョン: 5.5.42 - Source distribution PHP/5.6.10

  • PHP
  • 回答数3
  • ありがとう数1

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

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

str_getcsv($str) で一発。 PHP Manual - str_getcsv http://www.php.net/manual/ja/function.str-getcsv.php

その他の回答 (2)

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.2

preg_match_all('/"(.*?)"/', $str, $matches); でどうでしょう。

  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.1

一番簡単なのは連結子(?)のカンマをスラッシュに置き換えて、 explode関数の区切り文字列をスラッシュにすることだと思うけど、ダメかな?

buzinesswa
質問者

お礼

早速に回答いただき有難うございます。 連結子(?)のカンマをスラッシュとは、 「,」→「/」かと思いますが 『"文字","1,2,3","テキスト"』に実行すると 『"文字"/"1/2/3"/"テキスト"』の様になりませんでしょうか? 無知で申し訳ありません、、、方法があるならお教え下さいませ。

関連するQ&A

  • PHPで、"内は分割せずに、配列に分割する方法はありませんか?

    explodeや正規表現など、いろいろ考えたのですが、スマートな方法が見つからず、ヒントでもいただけるとありがたいです。 やりたいことは、 ABC 123 "BBB HHH" 456 789 "あい うえお" DDD という文字列を分割して配列に入れたいのですが、 "内は1つの文字列として分割せずに取り出したいのです。 結果として、 array( 0=>"ABC", 1=>123, 2=>"BBB HHH",// 元の"があってもなくてもいい 3=>456, 4=>789 5=>"あい うえお", 6=>DDD ) というものを得たいわけです。 単純に explode や split ではダメですし、正規表現だとどうなるのやらと。 "内の (スペース)を他のモノに置き換えて、explodeした後もとにもどす、とかでしょうか。他に何か手がありましたら、ご教示お願いします。

    • ベストアンサー
    • PHP
  • javaの文字列分割

    文字列を分割して、またさらに分割することはできますでしょうか? 具体例をあげますと st = jave 入門,bai ダウンロード,kai ゲーム; この文字列をString[] str = st.sprit(",");で分割して、 さらにstrをString[][] strl = str.sprit(" ")で分割して表示すると str[0][0] = java str[0][1] = 入門 str[1][0] = bai str[1][1] = ダウンロード str[2][0] = kai str[2][1] = ゲーム という形にしたいのですが、どうしたらよいでしょうか?

  • phpの配列を代入

    初めての質問です。 よろしくお願い致します。 phpの配列を代入する方法ですが $data("テスト1#テスト2#テスト3"); $ary= array("5874","9874"); $dataの結果を テスト15874テスト29874テスト3 特定の文字列に「#」に$aryを順番に代入したいのですがわかりません。 str_replaceでなさそうですし、どうすれんばいいのでしょうか?

    • 締切済み
    • PHP
  • phpで、配列の値が意図せず変わってしまいます。

    環境はphp4です。 for、もしくはforeachを使って配列の中身を変えたいと思っています。 $array1 = array(123csv, 456csv, 789csv); for($a = 0; $a <= count($array1) -1; $a++){ $array2[] = "a" . $array1[$a]; } echo $array1[0]; echo $array2[0]; 上記の出力結果がなぜか異なり困っています。 array1[0]は「123csv」、 array2[0]は「a113csv」、もしくは「a12300v」 などとなってしまいます。 先頭に「a」を付加しない場合も「113csv」、もしくは「12300v」という結果です。 ちなみに$array1はexplodeを使って空白文字をを分割して作成した配列です。 これなバグなのでしょうか。 原因、回避策など、いろいろ調べましたが検討がつきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでCSVファイルの中身を多次元配列にしたい

    PHPを学習中です。CSVを多次元化して最後はセッションに格納し、自由に他のページでもそのセッションを読み込めるようにしたいです。 CSVの中身はコード名、商品名、値段、在庫数になっています。 while(!eof($f_pt)){  $data=fgets($f_pt);  $data=rtrim($data);  $str=explode(",",$data);  $str[0]=array($str[1],$str[2],$str[3]); } こんな風にひとまずコードに格納してwhileで回せばいいのかな??っと苦戦しています。 そしてセッションにしたあとforeachでどうやって配列で表示すればいいかわかりません。。。 アドバイス等頂けたら幸いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定の文字で分割する再帰関数

    PHPで、ある文字列に特定の記号があった場合、explodeで分割して、最終的に記号が取り除かれた配列を作成したいのですが、再帰などを用いていたら頭がこんがらがってしまいうまく作ることができませんでした… 試行錯誤の残骸を残すので、アドバイスいただけないでしょうか。 例)「north : we.st:e-a-s-t:south」 →以下の要素を持つ配列にしたい north we st e a s t south ★以下、試行錯誤した残骸です・・・ $data = array("north : we.st:e-a-s-t:south'"); $kigou = array("-","=","',"'",":",";",",","."); $last_result = doDivide($kigou, $data); function doDivide($kigou,$array_words){ //分割配列分ループ foreach($array_words as $word){ //トリム $word = trim($word); //記号分ループ foreach($kigou as $k){ //単語が記号にマッチするか調べる $match_result = preg_match("/" . $k . "/", $word); if ($match_result !== 0) { //マッチした記号で配列に分割する $divided_array = explode($k, $word); //配列に空白があったら削除する $divided_array = array_diff($divided_array, array( "" )); //再帰的に呼び出す $result[] = doDivide($kigou, $divided_array); } } } //分割されきった単語を返す return $result; }

    • ベストアンサー
    • PHP
  • PHPでの配列を分割する方法を教えて下さい

    私はPHPを始めたての初心者です。 現在、私は2chビューワーを作って居ます。 まず、datを読み込み、explodeで<>を条件に分割しました。 ここからメール欄、名前欄、ID、BE、内容などを分けて別の変数の配列に分けて入れたいのですが、良い方法が思いつかないのです、どなたか教えて頂けないでしょうか。 現在のスクリプトを貼ります。 $dat = @file_get_contents($dat0); #datの取得 $dat_bunkatu = explode("<>", "$dat"); $dat0はdatのアドレスです。 宜しくお願いします

    • ベストアンサー
    • PHP
  • PHPの文字列のエスケープについて

    php.iniの設定で「magic_quotes_gpc = On」なっており、htmlentities($str, ENT_QUOTES)で、ダブルおよびシングルクオートを共に変換します。 しかし、シングルクオートがエスケープされて、「'」になるのですが、これを「'」に変換しなければなりません。 (そんな依頼を受けて、プログラミングをしていますが、全くうまくいきませんorz。) 単純に考えて、シングルクオートをエスケープしなければよいと思うのですが、 フォームのデータを受けとるときに、シングルクオートをエスケープしなければならないとマズイことでもあるのでしょうか? 変な質問ですが、宜しくお願いします。

    • ベストアンサー
    • PHP
  • 文字列を配列に変えたい【PHP】

    文字列を配列に変えたいです。 下で一応はできたのですが、URLの数の変化に対応できるようにしたいです。 よろしくお願いします。 $catch="URL1 URL2 URL3 URL4"; $split = explode(" ",$catch); $url=array( $split[0], $split[1], $split[2], $split[3] );

    • ベストアンサー
    • PHP
  • PHP コードを文字列として出力する方法

    お世話になります ダブルクォーテーションで囲っても 「PHP コード」を「文字列」として出力する方法 つまり、evalの逆の関数のようなものはありますでしょうか $a['huga'] = 2; $b['hoge'] = 3; //式 $c = $a['huga'] * $b['hoge'] ; abc($c = $a['huga'] * $b['hoge'] ); function abc($str){ //ここでなんちゃらほんちゃら //もしくはfunctionの外側でなんちゃらもでも可 echo $str; } 期待する出力結果 $c = $a['huga'] * $b['hoge'] ; 実際の結果 6 $の前に¥を入れてダブルクォーテーションで囲めば、 または、シングルクォーテーションの前に¥を入れてシングルクォーテーションで囲めば 文字列になるのはわかりますが 式の文字列には直接、手を加えず関数等で実現するやり方が知りたいです ※連想配列のキーの囲み文字はシングルクォーテーションです、ダブルに出来ない条件でお願いします。 お忙しい中恐縮ですが熟練者の方でわかる方がいましたら お教え下さいませ

    • ベストアンサー
    • PHP

専門家に質問してみよう