質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2610閲覧

ラウンドロビンの実装方法

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/07/14 11:29

php で分散処理(?)を行う処理の実装方法を検討しています。

素直に実装すると、カウンター/分散先の数の余りをif ~ elseif switch ~ caseを使用して、分散させると思いますが、分散先の追加、削除を行う際に、ブロック単位での修正が出来ないので、人為的ミスをしてしまうケースがありました。

php

1$i = $count % 3; 2 3switch ($i) { 4 case 0: 5 分散先1; 6 break; 7 case 1: 8 分散先2; 9 break; 10 case 2: 11 分散先3; 12 break; 13}

例えば、上記で分散先2を消すと、case 1が空になるので、case 2を1に変更する必要が出てきます。
合わせて% 3の3も2に変更しなければならないですが、できればそれも手を入れたくないです。

実装したいのは、case ~ break などのブロック単位のみの変更で追加/削除できる記述ですが、良い方法はありますか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

*「分散先」というのが例えば単なるURLなら可変関数による実装は冗長なので、
takasima20さんの回答の方法が一般的だと思います。

処理自体を分ける必要があるのであれば、
Switchで実装しようとするとどうしても無理が出るでしょうから、
分散先の処理のクラスなりメソッドなりをファイルなりDBなりに保存して、
それを可変関数実行するという形ではどうでしょうか?

例えばファイルはこんな感じで処理3と4は欠番になったような状態で、実施される関数名(なりメソッド名なり)をそのまま下位行区切りで記述。

process1 process2 process5

処理名に対応する関数名(なりクラス、メソッド名なり)はどこかに作っておく。
存在しない関数名を記述してしまわないかどうかは、チェッカーを作るなり、データ投入ツールを作っておく

PHP

1//分散すべき処理を取得 2$process_list = explode(PHP_EOL,file_get_contents("data.txt")); 3 4//$countは何らかの方法で実装済みだと思います 5$i = $count % count($process_list); 6 7$func = $process_list[$i]; 8 9$func(); 10 11 12//以下、命名規則に沿って関数毎に別ファイルにでも作っておくと追加/削除時のミスが無くなりそう 13function process1(){ 14/// 15} 16function process1(){ 17/// 18} 19

投稿2016/07/14 11:59

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/14 14:01

ありがとうございます。 可変関数、面白いですね。 使ったことがなかったので、使ってみます。 いろいろ応用(ワザ)がありそうな機能ですね。
退会済みユーザー

退会済みユーザー

2016/07/14 14:06

可変変数なんてものあるんですね。
tanat

2016/07/14 14:13

そうなんですよね。下手に使うと可読性が落ちてしまいますがこのあたりはなかなかに面白いです。 今回のご質問の肝は処理の振り分け、分岐かと思いますので、 ガッツリ実装するなら有名所のフレームワーク(フロントコントローラーパターン採用)がどの様にリクエストから処理を分岐しているかのソースを読むのが非常に参考になるかと思います。
退会済みユーザー

退会済みユーザー

2016/07/14 16:23

あぁ、フレームワークだと多用してそうですね。フレームワークは中身を見ないようにしてきたんで、そろそろ中身も気にしてみるようにしますw
guest

0

ベストアンサー

単純に、分散先を配列でもって、$countを配列数で割った余りを
インデックスにするって方法を思いつきますが…
なんか、これじゃまずいってのありますかね?

投稿2016/07/14 11:45

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/14 13:58

ありがとうございます。 これでまずいってのはないです。 こちらの方法で、実装できることも確認できました。 折角の機会なので、他にも色々やり方があれば、教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問