• ベストアンサー

split関数とexplode関数の違いと、define関数について

初歩的な質問なのですが二点質問させてください。 1・ split関数とexplode関数の明確な違い、使い分けがわかりません。 どちらも指定した区切り文字で分解できるのは分かるのですが、それぞれどういったケースで使い分けるのでしょうッか。 2・ define関数は定数名を決めて、その定数に内容として数値やストリングを格納できるようですが、 そもそも、変数にストリングや文字を入れればいいだけで、わざわざ「定数」というものを利用する意味、メリットというのは何があるのでしょうか。 よろしくお願いします。

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

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

1. splitは、区切り文字に正規表現が使える。その分遅い。 explodeは、区切り文字に正規表現が使えない。その分速い。 まぁ、速い遅いといっても、大量のデータを処理するのでなければ、 ほとんど変わらないと思いますが。 2. 定数と変数の使い分けは、 名が表すとおり、定数は定まった値です。 コード中で、値を変更することはできません。 例えば、消費税の税率等、変更される可能性はあるが プログラム中では変更しない値とかで使うとか。 define("ZEI",0.05); print 100 * (1 + ZEI); あとは何度も使う、長ったらしいパス名とかを PATH とかの定数にすると、コードの視認性が 高くなるので、後のメンテナンスに役立ったりします。 もちろん変数で、同じことはできます。 ただ定数は設定しているところは1ヶ所で、 変更はできないので、修正するときは1ヶ所を 直すだけですみます。 変数を使うと、こちらの意図していないところで、 値が変更されてしまう可能性がありますから。

参考URL:
http://search.net-newbie.com/php/language.constants.html
shevy
質問者

お礼

ありがとうございます。 非常によく分かりました! splitとexplodeで、explodeのほうがより高速であるということは知りませんでしたし、また正規表現にはsplitということも知れて本当に勉強になりました。 定数もなるほどと納得しました。 ご丁寧にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • the845t
  • ベストアンサー率33% (246/743)
回答No.2

1. 正規表現を必要としない場合は、explode()の方が高速です。 split()は正規表現を使う、explode()は単に文字列で・・・ の違いかと。 2. 一度定義すると不変のものなので、そういうところが利点でしょう。 実際に使ったことないので良く分かりませんが・・・・。

shevy
質問者

お礼

正規表現の際にsplitは必要だということですね。 わかりました。 またdefine関数は使われている人も意外に少ないのかなと思いました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変数を取り出しているのに、なぜdefine関数は使

    変数を取り出しているのに、なぜdefine関数は使わないの? 変数に値を格納して取り出すときは、define関数を使うと覚えたのですが 牡蠣コードでも変数に値を入れて取り出せます。 <?php $number = 12345; echo $number; ?> define関数はどういう時に使うのでしょうか?文字列の場合のみですか?

    • ベストアンサー
    • PHP
  • Excel97 VBA とVBSのsplit関数

    新しい職場で、Excel VBAでデータを取り込み、それを改行文字ごとにsplit関数で区切って配列に入れようとしました。 arr=split(文字列,vbcrlf) って感じでですね。しかし、なんとその職場のExcelのバージョンが97のため、VBAでsplit関数が使えず、この意図が実現できませんでした。そのため、ネットで調べてVBScriptのsplit関数を流用しようとしたのですが、「終了していない文字列型の定数です。」とエラーが出てしまいます。ソースは次のとおりなのですが、どう直せばいいでしょうか。改行文字で区切るのでなく、カンマなどで区切るのなら、上手く出来るのですが・・・。 Sub sample() Dim vs As Object Dim rtn As Variant Dim q As String Dim buf As String q = Chr$(34) 'ダブルクォーテーション Set vs = CreateObject("ScriptControl") vs.Language = "VBScript" 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 buf = "1" & vbCrLf & "2" & vbCrLf & "3" '改行で区切った文字。実際は、もっと複雑な文字を取り込みます。 rtn = vs.Eval("split(" & q & buf & q & ", vbCrLf)") 'Excel97のVBAにはsplit関数がないのでVBSからsplitを流用 Debug.Print rtn(1) 'ここで「終了していない文字列型の定数です。」エラーが出る End Sub

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • splitと同じ処理

    たとえば、 String[] s = new String[10]; String str = "abc:def:ghijk:lmn" s = str.split(":"); と同じようなことをsplitを使わずに簡単に行う(定石的な)方法はないでしょうか? 正規表現ではなく文字列による区切りのみの場合を考えます。

    • ベストアンサー
    • Java
  • splitの使用方法

    String.split の使用に関してです。 ファイルから一行づつ読み出して split で切って配列にしたいと考えています。 ファイルの中身は 1|ssm3u|00000| 2|ssm3u|11111| のように「|」区切りになっています。 通常のcsv等、カンマ区切りのファイルは split(","); を使用して問題なくできたのですが、 split("|"); と書くと、 「|」ではなく、1文字ごとに切ってしまいます。 どうすれば「|」ごとに切ることができるのでしょうか? あるいは、私のプログラム記述ミスでしょうか?

  • マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?

    素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。 以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。 .NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか? 覚えて無意味はきついので・・・ /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\\純一郎"; } else { str = args[0]; } // strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。 // $names = split /\r\n/ $str; <=※ここです。 array<String^> ^names = { "太郎", "花子", "純一郎" }; String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 改行入り変数を改行を残したまま改行区切りで配列に入れる方法

    file()関数と同様の事を、ファイル名を指定ではなく変数名を指定して行いたいのですが、explode()関数だと改行(区切り文字)は削除されて配列に格納されてしまいます。とりあえず以下の2つの方法しか思いつかないのですが、どちらが効率的でしょうか? 又、他にもっと良い方法ありましたら教えて欲しいです。お願いします。 方法1 explode後、配列を再ループし末尾に改行コードを付与 方法2 strstrとsubstrで変数をカットしながら配列に格納

    • 締切済み
    • PHP
  • CSVファイル 読み込み後のsplit

    loadVarsを使い、CSVファイルを読み込んだ後で、 そのテキストを一度変数に落としてから splitしようとすると、何も返って来ません。 ----- var nText = String(bSuccess_text); gMessageList = nText.split("\r\n"); ←ここ ----- ※bSuccess_text、nText にテキストが来ているのは確認できています。 ※テキストはwindows改行であることを確認しています。 ※splitの値をカンマとか、別の物(1文字のもの)にしてみても同じく何も返って来ません・・。 ※変数に落とさない状態でもダメで、念のためにつけているstring() を外してもダメでした。 どなたかご存知の方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • split() 正規表現

    正規表現で / (スラッシュ) .(ドット)にマッチ 正規表現により文字列を分割し、配列に格納する split("[/\.]" $v)としていましたが split関数が使えなくなるので、変わりの方法を考えていますが preg_split()などではうまくいきませんでした。 何か方法を教えて下さい。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 青春18きっぷで東京から関西まで行く際、三島から浜松までの新幹線ワープをする場合、事前に三島から浜松までの乗車券、三島から静岡までの新幹線自由席特急券、静岡から浜松までの新幹線自由席特急券を購入し、静岡で下車せずに三島から浜松まで通しで乗車し、浜松駅改札で必要な切符を出すことで乗車可能です。
  • 静岡で特急券を分割することは新幹線の一駅特例を受けるためであり、三島-静岡、静岡-浜松はそれぞれ2駅ですが元は1駅だったため一駅特例の適用があります。そのため、三島から浜松まで通しで特急券を買うよりも安くなります。
  • 青春18きっぷを利用する際に、新幹線で三島から浜松までの乗車券を購入する方法について、三島から浜松までの乗車券、三島から静岡までの新幹線自由席特急券、静岡から浜松までの新幹線自由席特急券を用意し、静岡で下車せずに通しで乗車し、浜松駅改札で必要な切符を出すことで乗車可能です。また、静岡での特急券分割は新幹線の一駅特例を受けるためであり、三島-静岡、静岡-浜松はそれぞれ2駅ですが元は1駅だったため、一駅特例の適用があります。これにより、通しで特急券を買うよりも安くなります。
回答を見る