• 締切済み

ユーザー定義関数

自サイトのアクセス解析をしようと SERVER変数を取得してログを解析しようとPHPで組んでみたのですが、 いまいちユーザー定義関数の上手?な使い方がわかりません。 アドバイスを頂けると幸いに思います。 データはcsv(すみませんSQL使えません)ファイルに1アクセス1行 日付,時間,キャリア等々 と記述しています。 ドコモをカウントする場合 function doco( $Key){ $handle = fopen( "LogFile", "r"); $count= 0; while (($data = fgetcsv($handle)) !== FALSE) {  if( mb_eregi( $Key, $data[2])){ $count++; } } echo $count; fclose($handle); } doco( "DoCoMo"); となり、さらに時間別にドコモで0時に来訪したのは何人? といった場合 ifの中にさらに時間の判別のifを記述し 引数の部分を増やしdoco( 引数1,引数2)見たいな感じにしますが そうではなく、 ドコモだけの人数を取り出したい場合も ドコモから12時の人数だけを取り出したい場合も 同じユーザー定義関数を使う方法はありますか? 宜しくお願いします。

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

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

function funcName($arg = 1); は 引数無しで呼ばれた際に $arg に 1 を代入する意味です。 funcName(); funcName(0); funcName(null); などお試しください。 2つ目の方は、 $count = countDocomo(array('date' => '2009-12-01')); と呼んだときに if (isset($options['date'])) {} で日付の指定があることを判断できます。 もっと大きな関数にすると $options = array('career' => 'docomo', 'date' => '2009-12-01'); $count = count($options); みたいになりますね。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

function countDocomo($date = null) { . . if ($date !== null) { . . } . . return $count; } function countDocomo($options = array()) { . . if (isset($options['date'])) { . . } . . return $count; }

makolivejp
質問者

お礼

回答有難う御座います。 すみません、折角回答して頂いたのにも関わらず読解出来ないです。 なんとなくですが、個々の意味は 上側のユーザー定義関数 引数をNullにして初期化?でしょうか。 <下の処理でissetで空で引っかかるのを防ぐ為? それから、変数に何か入っていれば処理・・・ 下側は option引数に配列を空にして突っ込み もし、引数が定義されていたら処理 引数は、、、えっと$optionsの['date']・・・'date'? と、こんな感じでしか理解しておりません。 申し訳ないです。 明日お休みなので、回答して頂いたのを元に 色々とイジってみたいと思います。 また補足で更なるヒントをこうかもしれませんが、 宜しくお願いします。

関連するQ&A

  • 関数の定義

    関数の定義とは ここから 戻り値の型 関数名(引数リスト) {   文;   ・・・   return式; } ここまで のことをいうのでしょうか??あたりまのような質問ですみません。 参考書には、「関数の定義はブロック内にまとめて記述します」 となっているので{ }の中のものだけなのかと思ってしまいました。 初歩的な質問ですがよろしくお願いします。

  • ACCESS Viewでユーザー定義関数を使いたい

    ACCESS2000+MSDEで開発をしていますが、Viewの中でユーザ定義関数を使用したいのですが、できません。 1> create function dbo.count1(@linkNo int) 2> returns int 3> as 4> 5> begin 6> declare @cnt int 7> 8> select @cnt = count(*) from dbo.TBL_OA where [link] = @linkNO 9> 10> return @cnt 11> end 12> go 1> select dbo.count1(100) 2> go ----------- 1 (1 件処理されました) ここまでは上手く行くのですが、 ACCESS側でViewの列へ count1(100)と記述すると 「ADOエラー:'count1'は関数名として認識されません。」 とエラーになってしまいます。 方法は問いませんが、Viewの中でユーザー定義関数が使用できる方法、ご存知の方いらっしゃいましたら、よろしくお願いします。

  • c言語の関数定義について

    次の関数定義を考える. int f(int x) {if (x > 0) {return x * f(x-1);} else {return 1;} } この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ.ただし,オーバーフロー(overflow) については考慮しなくてよい. ”この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ”って理解できません、どのように定義したいいか、ご教授お願いします。

  • ユーザー定義関数にて

    色つきセルの合計を数えるユーザー定義関数を使用していますが 普通の関数のように、セルに変更等ですぐに更新してくれればいいのですが 表示は前回のままです。(ですのでF9を押しています) 計算ではちゃんとした数字になっているのですが 更新が遅くて変更されません。 (セル範囲は縦で30個ぐらいです) すぐに更新するいい方法はないでしょうか? ご経験者の方々、知識ある方々の ご意見やアドバイスなどをよろしくお願いします。 色つきセルのカウント Function CountColor(計算範囲, 条件色セル) Application.Volatile CountColor = 0 For x = 1 To 計算範囲.Rows.Count If 計算範囲.Rows(x).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then CountColor = CountColor + 1 End If Next End Function

  • ユーザー定義関数が入力されたセルを調べたい

    Excel でユーザー定義関数を作成し、アドインにして仕事で使っています。 これらの関数を使用したブックを外部に配布する時にユーザー定義関数を値に変換してから配布したいのですが、ユーザー定義関数とワークシート関数の区別の方法が判りません(外部にアドインは配布しません)。 Dim r As Range Dim f As String For Each r In Activesheet.UsedRange If r.HasFormula Then f = r.Formula Do ' f がユーザー定義関数の一覧の中に見つかれば、セル r の色を変えてループ脱出 Loop End If Next という方法を試みましたが、UsedRange の大きさやユーザー定義関数の数が多いことも影響して結構な時間が掛かってしまいます。 ユーザー定義関数とワークシート関数を区別する方法があれば、Do~Loop を回さなくて済むので、時間短縮できるのではないかと考えています。 よろしくお願いします。

  • usort のユーザー定義比較関数の説明について

    PHPマニュアルにあるusortの説明がうまく理解できなくて悩んでいます。 そこでは、パラメータとなる比較関数について次のように書かれています。 「比較関数は、最初の引数と二番目の引数の比較結果を返します。最初の引数のほうが二番目の引数より大きい場合は正の数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の数を返す必要があります。」 http://php.net/manual/ja/function.usort.php 「usort() の例」として提示されているのは以下です。 function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); この例のユーザー定義の比較関数cmpは、前述の説明の通りに書かれているので理解できます。 しかし、ユーザーページの投稿にもありますが、($a > $b) としたり、($a < $b) ? 1 : -1 のように返り 値を変えて降順(逆順)にソートするという使い方を普通に見かけます。 これは、「最初の引数のほうが二番目の引数より大きい場合は正の数を(……)二番目の引数より小さい場合は負の数を返す必要があ」るという説明とは矛盾しています。 「必要」とまで書いているのでかなり強い指示だと思います。英語版でも「must」となっているので翻訳上の問題はなさそうです。 また、「配列のソート」ページによるとソート順は「ユーザー定義」とあり、件の比較関数次第ということになっています。 http://www.php.net/manual/ja/array.sorting.php ということは、逆順であれ自然順であれ可能だとこれは示唆しているのだと思うのですが、やはり説明部分との矛盾が気になります。 ……どう捉えたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • 【EXCEL VBA】ユーザー定義関数の設定

    ネットより拝借した下記ユーザー定義関数を使用して、複数の選択したセルの値を区切り文字(セミコロン)で連結する仕組みを作成している途中です。 (例えば、A;B;C;D のように) Function myJoin(範囲 As Range, Optional 区切り文字 As String) As Variant Dim c As Range, buf As String If 範囲.Rows.Count = 1 Or 範囲.Columns.Count = 1 Then For Each c In 範囲 buf = buf & 区切り文字 & c.Value Next c If 区切り文字 <> "" Then myJoin = Mid$(buf, 2) Else myJoin = buf End If Else myJoin = CVErr(xlErrRef) 'エラー値 End If End Function セル(F6)からセル(Fxx)までデータが入力されています。(xxは変動します。) これらのデータをユーザー定義関数を使ってセル(F1)に[=myJoin (F6:Fxx,";")]を 入力するためのマクロを組んでみたのですが 「コンパイルエラー修正候補:区切り文字または)」となってしまいます。 (添付画像を参照願います。) 手入力でセル(F1)にユーザー定義関数(例:=myJoin (F6:F8,";"))を設定すると問題なくデータの連結が出来ます。このエラーを解消するにはVBE上でどのように定義したらいいのか、ご教授の程宜しくお願い致します。

  • 【VBA】ユーザ定義関数が動かない

    【VBA】ユーザ定義関数が動かない 下記のようなプログラムをVBEの標準モジュールに記述して、 ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所 セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。 本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。 ご教授願います。 ◆関数の仕様  引数1と引数2に入力された文字列を連結して返り値として返す。 ◆コード Function tc(str1 As Range, str2 As Range) As String Dim Str As String Str = str1.Value & str2.Valuett tt = Str End Function

  • 関数の引数に未定義の変数を渡すとエラーが出る

    自作の関数で、issetとemptyを一緒に判定する関数を作っているのですがエラーが出ます。 ある変数が「未定義」または「null」または「""(空白)」の場合はnullである、という関数を作りたいです。 ------------------------------------------ function is_null_ex($value){  if (!isset($value)) {return true;}               // 未定義かnullの場合、trueを返す  else if (strlen(strval($value)) === 0) {return true;}   // 空白の場合はtrueを返す  else {return false;}                      // $valueに値が入っている場合はfalseを返す } is_null_ex($val); ------------------------------------------ 上記の関数で$valueが未定義の場合にfuncを使うと、次のようなエラーが出ます。 Notice: Undefined variable: val つまり、未定義の変数を引数に渡すとエラーが出ます。 「未定義なら関数に渡さなければ?」と思うかもしれませんが、そもそもこの関数は「未定義」または「null」または「""(空白)」を判定したい関数なのです。 この場合、どうすれば良いのでしょうか? エラーは出ますが上記の関数で「if (!isset($value)) {return true;}」の部分できちんと判定はされています。 PHP5.3系で運用しています。 ぞうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • Excelで関数ウィザードの説明欄にユーザー定義関数の説明を表示させるには?

    Excel2000でVBAを用いてあるユーザー定義関数を作成し, それをアドインファイルとして組み込ませました。 ワークシートのセル上で関数ウィザードを開き, このユーザー定義関数を選択するとウィザードの説明欄に 『[ヘルプ]をクリックすると、この関数と引数に関するヘルプトピックが表示されます』 と表示されます。 他の関数では,この『』内にその関数の説明が表示されています。 (例)AND関数の場合『全ての引数がTRUEのとき、論理値TRUEを返します。』 自作したユーザー定義関数の説明を関数ウィザードで表示したいのですが, どうすれば出来るのか教えていただきたくお願いいたします。

専門家に質問してみよう