のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,683,108人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレくだすれPHP(超初心者用)6

php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
551 : 544 - 2009/07/06(月) 18:18:24 ID:??? (+62,+29,-85)
データベースの統計情報みたいなやつとか
昨日何人が登録したとか、1ヶ月以上ログインしていないユーザーを
削除するとか
管理人しか使わない訳だし、例えばワード検索で自演XSSやSQLインジェクションができてもいいのかなと
やるには自分で不正コード打ち込まないといけないじゃない?
552 : nobodyさん - 2009/07/06(月) 18:22:45 ID:??? (+52,+29,-3)
打ち込まなきゃいいじゃない?
553 : 544 - 2009/07/06(月) 18:23:36 ID:??? (+52,+29,-3)
だからいらないんじゃないのって
554 : nobodyさん - 2009/07/06(月) 18:37:20 ID:??? (+52,+29,-1)
じゃそれでいいんじゃないのって
556 : nobodyさん - 2009/07/06(月) 19:05:05 ID:??? (-6,-29,-4)
in_arrayでよいのでわ?
557 : nobodyさん - 2009/07/07(火) 12:33:10 ID:??? (+84,-30,+0)
PHPというかもはや計算の問題なんですが、
$int = 500;
if ($int >= 568) { $lv = "Lv9"; }
elseif ($int >= 406) { $lv = "Lv8"; }
elseif ($int >= 278) { $lv = "Lv7"; }
elseif ($int >= 180) { $lv = "Lv6"; }
elseif ($int >= 108) { $lv = "Lv5"; }//5*5*2(50)+4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 58) { $lv = "Lv4"; }//4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 26) { $lv = "Lv3"; }//3*3*2(18)+2*2*2(8)
elseif ($int >= 8) { $lv = "Lv2"; }//2*2*2(8)
else { $lv = "Lv1"; }//0
echo "{$lv}<br>";
というソースを実行するとLv8<br>が出力されます。
これを
$lv = $int / (ごにょごにょ演算);
的な感じで1行(もしくは数行)にしたいのですが、計算式がわかりません…
$intと比較する数字はコメント部分の通りです。
どなたか教えていただけるとありがたいです。
アホな質問ですいません。
558 : nobodyさん - 2009/07/07(火) 12:36:30 ID:??? (+51,+18,-42)
無理に短くしないで関数にすればいいだけじゃん。

ロジックを整理するならともかく、書き方で短くするだけだと
あとで条件変更しにくくなるよ。

あと、個人的には、$int という変数名はinteger 一般みたい
で抵抗がある。
559 : nobodyさん - 2009/07/07(火) 12:43:51 ID:??? (+43,+20,-2)
forで引いていけばいいじゃん
560 : nobodyさん - 2009/07/07(火) 13:41:04 ID:??? (-6,-29,-15)
switchではダメなん?
561 : nobodyさん - 2009/07/07(火) 14:58:56 ID:??? (+31,-30,-279)
>>557

$int = 500;
$lv = levelcheck($int);
echo "{$lv}<br>";

function levelcheck($int){
if ($int >= 568) { $lv = "Lv9"; }
elseif ($int >= 406) { $lv = "Lv8"; }
elseif ($int >= 278) { $lv = "Lv7"; }
elseif ($int >= 180) { $lv = "Lv6"; }
elseif ($int >= 108) { $lv = "Lv5"; }//5*5*2(50)+4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 58) { $lv = "Lv4"; }//4*4*2(32)+3*3*2(18)+2*2*2(8)
elseif ($int >= 26) { $lv = "Lv3"; }//3*3*2(18)+2*2*2(8)
elseif ($int >= 8) { $lv = "Lv2"; }//2*2*2(8)
else { $lv = "Lv1"; }//0
return $lv;
}
562 : nobodyさん - 2009/07/07(火) 15:07:28 ID:??? (+49,+22,+0)
>>561
頭わりぃw
563 : nobodyさん - 2009/07/07(火) 16:05:37 ID:??? (+133,-30,-82)
>>557
$intがlv0の時1*1*2だと都合がいいので($int+2)で考える。
自然数の自乗の和は1/6*(2n^3+3n^2+n)なので、3次方程式の解の公式に、
a=2,b=3,c=1,d=0を当てはめる。
3次方程式の解の公式は
こんなかんじ。
あとは自分でがんばってくれ。

564 : nobodyさん - 2009/07/07(火) 16:13:19 ID:??? (+62,+29,-39)
一つの公式作ってそれだけで同じ種類のあらゆる計算に当てはめるって、
誰もが一度はやってみるよなw

数学の世界ならいいけど、コンピュータだと演算方法が限られてるから、
そんなことやっても誰も得しないという。
565 : nobodyさん - 2009/07/07(火) 16:51:38 ID:??? (+67,+29,-14)
>>557が式が欲しいって言うからさ。
566 : nobodyさん - 2009/07/07(火) 17:15:47 ID:??? (+76,-30,-45)
for ($i = 1; $i < 10; $i++) {
print level($i)." ";
}

function level($level) {
for ($i = 1; $i <= $level; $i++) {
$return += (1 + $i) * (1 + $i) * 2;
}
return $return;
}
567 : 557 - 2009/07/07(火) 23:09:14 ID:??? (+74,+29,-36)
みなさんレスありがとうございます。
一応求めていたのは>>563さんのものだったのですが、
アホなので理解できませんでしたw
$lvが増えていくと処理が遅くなりそうですが、
とりあえず現状は9までで間に合うので>>566さんので妥協しようかと思います。
ありがとうございました。
568 : nobodyさん - 2009/07/08(水) 02:20:29 ID:??? (+75,+29,-15)
つ変数の初期化
つpow

てか今の経験値で到達するレベルじゃなくて、今のレベルに必要な経験値を求める関数でいいの?
569 : nobodyさん - 2009/07/08(水) 08:58:54 ID:szsLUg6E (+35,+29,-5)
>>568
今の経験値からLvがいくつかなのを求めるということでしょ。
570 : nobodyさん - 2009/07/08(水) 09:00:15 ID:??? (+52,+29,-1)
あげちゃったすまそ
571 : nobodyさん - 2009/07/08(水) 10:06:03 ID:??? (+56,+28,-6)
だからそのために1~99まで毎回ループして比較するわけ?って言ってんの
572 : nobodyさん - 2009/07/08(水) 10:26:11 ID:??? (+60,-4,-5)
その関数で配列作っておいて
配列スキャンするのがいいんじゃないかな。
573 : nobodyさん - 2009/07/08(水) 14:29:28 ID:??? (+57,+29,-45)
99回のループが問題になるって、どんなんだよw
それに、3次の解の公式の方が重たいだろ、複素数出てくるし3乗根出てくるし。
574 : nobodyさん - 2009/07/08(水) 14:36:42 ID:??? (+80,+28,-2)
お前頭悪いだろ
575 : nobodyさん - 2009/07/08(水) 14:44:00 ID:??? (+68,+29,+0)
>>574
理解できないならそう言えばいいのに。
576 : nobodyさん - 2009/07/08(水) 15:55:04 ID:??? (+61,+29,-20)
この一連の流れがまったくわかってない人がいるね
577 : nobodyさん - 2009/07/08(水) 18:11:27 ID:m/DVsNfk (-24,-29,-71)
PHPの完全な初心者です。
さきほど、http://windows.php.net/download/ よりZipをDLし、本の指示に従い
「php.ini-recommened」をコピーして「php.ini」にしようとしましたが「php.ini-recommened」
が見つかりません(似たようなものなら有りますが)。

DL→解凍した中身は下記の通りです。
 
どうしたら良いでしょうか?
578 : nobodyさん - 2009/07/08(水) 18:23:14 ID:??? (+3,-30,-37)
そのくらいで迷うなら本とバージョンもあわせたほうがいいかもね。

php.ini-development や php.ini-production の中見てみた?
あと一緒に添付されてるinstall.txtとかも読もうぜ
579 : nobodyさん - 2009/07/08(水) 18:25:03 ID:??? (+52,+29,-5)
応用の利かなさっぷりがすごいな…
580 : nobodyさん - 2009/07/08(水) 19:21:59 ID:??? (+6,-29,-15)
>>576
こうだろ。

568==571<今のレベルと次のレベルの経験値を保存しとけばいいだろ。
573<毎回99回のループで計算してなにか問題でも?
581 : nobodyさん - 2009/07/08(水) 19:45:09 ID:??? (-1,-24,+0)
572 でいいと思うのだが
582 : nobodyさん - 2009/07/08(水) 19:53:20 ID:??? (+0,-23,+0)
572でいいな。
583 : nobodyさん - 2009/07/08(水) 23:49:11 ID:??? (+151,+30,-164)
俺も>572のようにLvと総経験値の対応テーブルを持っておくに一票。

・計算式の変更が起きる可能性は高いだろうから、簡単に差し替えられるようにした方が便利
・また、変更があった際に、Lv10とLv2で同じ計算式になるって保証もないので、式の一般化はしない方が便利
・毎回算出しても問題になるような量の計算でもないが、無駄な計算を回避できるに越した事はない

>563 のような式そのものをコードの中に組み込むのは
・後でどういう式で計算してるのか分かるように、ロジックをソースコードの中に書いておきたい
「ルチ将軍のLvは1300だ」とか「私の戦闘力は53万です」とか、データ量が多すぎで一覧表にしてられない
場合とかかな。
584 : nobodyさん - 2009/07/09(木) 00:29:26 ID:??? (+57,+29,-23)
ワンチップマイコンでもあるまいし今の時代に
ソースサイズ必死で小さくする理由があるんかねw
585 : nobodyさん - 2009/07/09(木) 00:41:28 ID:??? (-1,-29,-10)
そもそもPHPが毎回起動すんだろ。

IF文が200個くらい増えたところで、
起動プロセスよりはるかに軽い。
586 : nobodyさん - 2009/07/09(木) 00:45:18 ID:??? (+17,-10,-2)
PHP毎回起動とか何時代のインフラだよ
587 : nobodyさん - 2009/07/09(木) 00:45:48 ID:??? (-5,-28,-4)
Apacheのプロセスでは?
588 : nobodyさん - 2009/07/09(木) 04:32:30 ID:??? (+79,+29,-28)
>>583は「構造化のススメ」かな?
ソース分けて関数にするだけで>>583のような心配は無くなる。
あとは関数の中身を自分の解りやすいように書けばいい。
589 : nobodyさん - 2009/07/09(木) 04:56:29 ID:??? (+48,+20,-20)
どういう関数にして実際のスクリプトではそれをどう利用すると?
590 : nobodyさん - 2009/07/09(木) 09:55:40 ID:??? (+3,-30,-174)
CG やアクションでも、計算量多いのは予め計算済みの値を配列(テーブル)に入れるのが定石。

function is_next_level($current_level, $current_exp) {
 $level_table = array(
  '1'=>'8',
  '2'=>'26',
  '3'=>'58',
  '4'=>'108',
  '5'=>'180',
  '6'=>'278',
  '7'=>'406',
  '8'=>'568',
  '9'=>'768',
  );

 $next_level = $current_level + 1;

 if ($level_table[$next_level] < $current_exp) {
  return true;
 }
 else {
  return false;
 }
}

$level = 54;
$exp  = 2000;
if (is_next_level($level, $exp)) {
 print 'レベルがあがった。再帰でも使って何レベル上がったか返す関数は自分で書け';
}
591 : nobodyさん - 2009/07/09(木) 10:33:32 ID:??? (+89,+29,-4)
学校の課題とかでスマートに書きたいんじゃね?
592 : nobodyさん - 2009/07/09(木) 11:46:56 ID:??? (+64,+29,-1)
>>591
君、そうとう鈍いだろ
594 : nobodyさん - 2009/07/09(木) 15:06:28 ID:??? (+57,+29,-4)
わざわざDBに計算してもらうの?(驚愕
595 : nobodyさん - 2009/07/09(木) 15:06:57 ID:??? (+14,-8,-6)
経験値取得の度に DB アクセス…
596 : nobodyさん - 2009/07/09(木) 15:35:32 ID:??? (+66,+29,-85)
ソース書く人と仕様を決める人が同じオナニープログラムなら
>>566みたいなのでいいかもしれんが
将来的に拡張される可能性があるなら配列に入れるのが手っ取り早いね
もちろん、いずれは膨大な数になるとかならDBでもいいけど
高々10個足らずの整数値しか取らない変数にDBはありえないでしょ
597 : nobodyさん - 2009/07/09(木) 15:59:42 ID:??? (-1,-24,+0)
572 でいいと思うのだが
598 : nobodyさん - 2009/07/09(木) 19:05:12 ID:??? (+52,+29,-16)
質問者不在の議論が続く…
600 : nobodyさん - 2009/07/09(木) 21:12:59 ID:??? (-1,-29,-4)
$textはどこいった? mail()に渡してないようだけど
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について