【PHP】下らねぇ質問はID出して書き込みやがれ 84
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/27(月) 21:39:11ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 83
http://pc11.2ch.net/test/read.cgi/php/1238958898/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0015nobodyさん
2009/04/28(火) 14:28:24ID:PkQXIDSH入力されたマルチバイト文字列(SJIS)を、配列ではなく、予め用意した変数に、
一文字ずつ分割して格納したく思っています。例えば、
$koe = "ありがとう";
なら、
$ichi ="あ"; $ni ="り"; $san ="が";
$yon ="と"; $go ="う"; $roku =""; $nana ="";
という風に変換する関数を設定したいのです。 具体的に、どういう処理をすればよいのでしょうか?
どうかご助力、お願いいたします。
0016nobodyさん
2009/04/28(火) 14:33:27ID:???SJISはちょっとイヤンな感じだからUTFにしたら?
0017nobodyさん
2009/04/28(火) 15:22:47ID:???0018nobodyさん
2009/04/28(火) 15:25:45ID:???0019nobodyさん
2009/04/28(火) 15:28:01ID:???$array = array("ichi", "ni", "san", "shi", "go");
$string = "ありがとう";
$count = 0;
foreach ($array as $key => $value) {
$array[$key] = mb_substr($string, $i, 1, "Shift_JIS");
++$count;
}
002019
2009/04/28(火) 15:31:09ID:???$array[$key] = mb_substr($string, $i, 1, "Shift_JIS");
これは
${$key} = mb_substr($string, $i, 1, "Shift_JIS");
にしてくれ
0021nobodyさん
2009/04/28(火) 15:39:37ID:???002219
2009/04/28(火) 15:40:57ID:???0023nobodyさん
2009/04/28(火) 16:53:54ID:7p1vmHWL再度質問させていただきます。
CSSファイルの特定のスタイルを取得したいと思います。
$css = 'a:link{background-color:#ffffff;color:#003399;}';
preg_match('/a:link{.*?color:#(.*?);/is',$css,$style);
とし、「color:#003399」の「003399」だけ取得したいのですが、
background-colorの方を取得してしまいます。
どういう正規表現を書けばいいのでしょうか?コードの指摘をお願いします。
002412
2009/04/28(火) 20:19:52ID:hPvdrkqO2回目以降のsession_start()はセッション変数の取り込みに奔走するんですね。
それでしたらわざわざ最後にunsetでセッション変数を破棄しなくても、
再度session_start()が実行されれば最新の$_SESSION['captcha_keystring']が
読み込まれて特に問題なく動作するような気がするんですが・・・
0025nobodyさん
2009/04/28(火) 20:38:49ID:???条件がよくわからんがa:linkに指定されたcolor値で#000000の形式のみを取得ってこと?
/a:link[^\}]*[^\-]color\s*:\s*#(\w{6})/is
002723
2009/04/28(火) 22:10:29ID:7p1vmHWLこういう書き方するんですね。勉強になりました。ありがとうございました。
0028nobodyさん
2009/04/28(火) 22:20:22ID:???とりあえず例題で動かしてから、自分でunset外して動作を見てごらん。
ソース眺めて悩むよりそっちの方が早いよ。
002912
2009/04/28(火) 23:31:23ID:hPvdrkqO↓のようにコメントアウトして実行してみました
//unset($_SESSION['captcha_keystring']);
結果は・・・、なぜか、というか予想通り何の問題もなく正常に動作しました。
やはり最後のセッション変数のunsetは不要だったんでしょうか。
あるいは古いブラウザでの互換性を重視しておまじない的に書いたんでしょうか。
0030nobodyさん
2009/04/28(火) 23:51:01ID:???そこで「なぜか」で止まっちゃダメだ。
$_SESSION['captcha_keystring']には、どの時点でどんな値が入っていたのか追ってみよう。
003112
2009/04/29(水) 03:02:23ID:I34g5E5l$_SESSION['captcha_keystring']にはアンセットされる直前までは
現在表示されてるものよりひとつ前のCaptchaの数字が格納されていました。
ただアンセットしてもしなくても次にsession_start()されるときに次のCaptchaの数字が
上書きされるようです。
う〜む・・・、なぜわざわざアンセットしているんでしょう( ´・ω・)・・・
0032nobodyさん
2009/04/29(水) 03:41:14ID:???0033nobodyさん
2009/04/29(水) 05:05:58ID:???0034nobodyさん
2009/04/29(水) 05:39:51ID:???0035nobodyさん
2009/04/29(水) 05:46:01ID:???0036nobodyさん
2009/04/29(水) 06:00:07ID:???>次にsession_start()されるときに次のCaptchaの数字が上書きされるようです。
違う。$_SESSION['captcha_keystring']をセットしてるのは誰かよーく調べてみなさい。
0037nobodyさん
2009/04/29(水) 06:20:53ID:???unset() はキーを発行する処理に対応してるから、そっちの実装を見ないと処理の流れは分からない
新規/リロードなら再発行、ポストなら検証までスルーって実装にすれば unset() いらなくなるかな
0038nobodyさん
2009/04/29(水) 06:30:11ID:???unsetしなかったら、同じキーで何度でも使えちゃうじゃん。
アカウント取り放題とか、メール出し放題とか。
キー値はサーバ側に保存しなきゃならんのだし、unsetまたはそれと同等な処理しなくて
良いパターンってないと思うけど。
0039nobodyさん
2009/04/29(水) 06:43:06ID:???発行と検証の2フェーズあって、検証中でなければ前回の残りがあったとしてもそれを破棄して再発行すればいいわけ
検証中で無いことは empty($_POST["key..]) && !isset($_SESSION['key..]) で判別可能
unset() をクライアントスクリプト側に任せているのは、例えば3回まではトライ可能、といった
キーを無効にするタイミングを選択できるようにしたいとかそういうことじゃないかと予想
0040nobodyさん
2009/04/29(水) 06:45:38ID:???× empty($_POST["key..]) && !isset($_SESSION['key..])
○ empty($_POST["key..])
再発行条件が empty($_POST["key..]) && isset($_SESSION['key..]) かなw
0041nobodyさん
2009/04/29(水) 06:53:22ID:???0042nobodyさん
2009/04/29(水) 07:00:53ID:???いや、機械と人間の識別に使うもの。
これだけだと、人間ならアカウント取り放題、メールし放題、コメントし放題だよ。
後半はその通り。
0044nobodyさん
2009/04/29(水) 07:37:23ID:sqsMUdXVオブジェクト指向とかさっぱりだし
ぶっちゃけ mysql_real_escape_stringで十分と思ってたら
えらい目に会いますか?
0046nobodyさん
2009/04/29(水) 12:10:15ID:???DB名:sample_db
テーブル名:sample_tbl
user名:sample
pass:pass
004746
2009/04/29(水) 12:10:56ID:5Db2GJA30049nobodyさん
2009/04/29(水) 13:24:45ID:???0050nobodyさん
2009/04/29(水) 13:24:55ID:???【PHP】Lvうpしたいので宿題ください
http://pc11.2ch.net/test/read.cgi/php/1147830986/
005146
2009/04/29(水) 13:49:34ID:5Db2GJA3移動します
すいませんでした
0052nobodyさん
2009/04/29(水) 16:23:34ID:???0053nobodyさん
2009/04/29(水) 16:25:55ID:???0055nobodyさん
2009/04/29(水) 23:16:13ID:bTfRl/qJどうしたらいいですか?
たとえば、Content-Script-Type: text/javascriptをheaderで吐いてから、
ケータイなので取り消したい場合などです
0056nobodyさん
2009/04/29(水) 23:19:19ID:???0057nobodyさん
2009/04/29(水) 23:20:27ID:???0059nobodyさん
2009/04/29(水) 23:26:01ID:???取り消しはできんと思うが、 headerを実行するタイミングはずらせたはず。
http://jp.php.net/manual/ja/function.ob-start.php
0060nobodyさん
2009/04/29(水) 23:49:25ID:???0061nobodyさん
2009/04/29(水) 23:50:48ID:sqsMUdXVなるほど。ありがとうです
0063nobodyさん
2009/04/30(木) 11:53:33ID:29t/7geC$foo=array(
"A" => 60,
"B" => 20,
"C" => 10,
"D" => 7,
"E" => 3,
);
$r = rand(1, 100);
foreach($foo as $k => $v){
if($r<=$v){
$ans=$k;
break;
}
$r-=$v;
}
echo $ans;
006463
2009/04/30(木) 11:56:30ID:29t/7geC$rに1〜100まで範囲でランダムで数字を代入します
foreachで$fooのキーと値を回していき、値がランダムの数字$rより低いか同じなら$キーを表示します
>>63のコードは確率のアルゴリズムでありますでしょうか?
0065nobodyさん
2009/04/30(木) 12:00:36ID:???質問の意図がイミフなんだが。
0066nobodyさん
2009/04/30(木) 12:09:31ID:???0068nobodyさん
2009/04/30(木) 12:32:14ID:29t/7geCこれで確率が出せるのかがわかりません
0069nobodyさん
2009/04/30(木) 12:38:19ID:???0070nobodyさん
2009/04/30(木) 12:41:55ID:???65 名前:nobodyさん[sage] 投稿日:2009/04/30(木) 12:00:36 ID:???
は?
質問の意図がイミフなんだが。
0071nobodyさん
2009/04/30(木) 12:44:25ID:???0072nobodyさん
2009/04/30(木) 12:44:46ID:???$foo=array("A" => 60, "B" => 20, "C" => 10, "D" => 7,"E" => 3,);
function castFuckinDice($foo) {
$r = rand(1, 100);
foreach ($foo as $k => $v){
if($r<=$v){
$ans=$k;
break;
}
$r-=$v;
}
return $ans;
}
foreach ($foo as $k => $v) {
$encounter[$k] = 0;
}
$max_trials = pow(2, PHP_INT_SIZE * 8) / 2;
for ($i=0; $i < $max_trials; $i++) {
$spot = castFuckinDice($foo);
$encounter[$spot] ++;
foreach ($foo as $k => $v) {
$ratio = $i ? $encounter[$k] / $i : 0;
printf("[%s]: %02.1f ", $k, $ratio * 100);
}
echo "\r";
}
0073nobodyさん
2009/04/30(木) 12:45:25ID:29t/7geC$rの値が1〜60の場合ですと当たりってことですよね
Bと20のときは1〜20のときが当たりってことですよね
ってことはAの60%から判定されるってことで完全な確率のアルゴリズムではない気がするのです
0074nobodyさん
2009/04/30(木) 12:46:41ID:29t/7geCすみません、私の説明ではこれ以上無理なのでここ読んできてください
ttp://q.hatena.ne.jp/1170658225
0076nobodyさん
2009/04/30(木) 12:52:14ID:29t/7geC$fooの配列の戦闘は"A"=>60なのでforeachで回すと"A"=>60のところから回ります
0078nobodyさん
2009/04/30(木) 12:53:44ID:???0079nobodyさん
2009/04/30(木) 12:54:06ID:???"A"=>60のところから回って
1〜100からランダムに得た値と比較して小さかったらそれを答えとするんだから60%じゃん
0081nobodyさん
2009/04/30(木) 13:13:35ID:???0082nobodyさん
2009/04/30(木) 13:15:48ID:???どの目が出るかは rand(1, 100) を実行した時点で決まる
あとは検証してるだけなので、どのアルファベットから始めても確定した過去は変わらない
狐につままれたように思っているのは確率分布の上側を除いていく処理が、なぜ指定された割合と一致するのかということだと予想
これが確率論から導けるのか、それともたまたま計算結果が一致する別のアルゴリズムなのか
それが「この処理は確率のアルゴリズムであるのか?」という表現に至ったのではないかね
0083nobodyさん
2009/04/30(木) 13:22:20ID:???>>68
出せます。安心してお使いください。
0084nobodyさん
2009/04/30(木) 13:22:21ID:???他人に対する配慮が足りない.
0086nobodyさん
2009/04/30(木) 13:24:45ID:???ttp://114.182.140.15/~user/public_html/cgi-bin/bbs18/bbsdata/20.gif
0087nobodyさん
2009/04/30(木) 13:25:14ID:2iRqPJM5突っかかる部分もありますが、納得できましたので閉めます
0091nobodyさん
2009/04/30(木) 13:28:58ID:???0092nobodyさん
2009/04/30(木) 13:30:05ID:???人に教えてもらったコードなんですがこのアルゴリズムでなぜ確率が計算できるのですか?
0093nobodyさん
2009/04/30(木) 13:30:51ID:???0097nobodyさん
2009/04/30(木) 14:24:02ID:???1から100までの数からランダムに選択したら、それが60以下である確率は0.6であるというのは明白だろう
この性質を利用して、「60以下である」という条件をAに結びつけ、60以下の数ならAを返すようにする
これはAが60%で出現するということと等価だ
ある数が、60以下ならすぐ終了
60以上ならそこから60を引いて、次にそれが20以下かどうか調べる
Ex. ある数が88なら、60以下か検証、違うから60を引いて28、20以下じゃないので20を引いて8、10以下なのでCを返す
というわけでそのループは、与えられた数が基準より小さいかを効率よく調べるアルゴリズムであって、確率の計算ではない
確率が得られているのは全て rand() に依る
その確率をアルファベットに結び付けているのがこのアルゴリズムというか処理ということになる
と俺なら考えるが、アルゴリズムがなぜ動くかなんて自分の頭で納得するしかないよ
0098nobodyさん
2009/05/01(金) 15:12:10ID:???0099nobodyさん
2009/05/01(金) 20:43:21ID:???PHPの時代は終わりでしょうか
0100nobodyさん
2009/05/01(金) 20:50:02ID:???たまにくだらない話題で議論はじまって100スレぐらい一気に伸びるだけ
0101nobodyさん
2009/05/01(金) 21:28:59ID:???0102nobodyさん
2009/05/01(金) 21:46:18ID:???0103nobodyさん
2009/05/02(土) 08:08:46ID:???0104nobodyさん
2009/05/02(土) 08:27:18ID:???マインドは冷え込んでるのは間違いないし、金のかかるJavaさんはもう論外になってる
0105nobodyさん
2009/05/02(土) 08:29:37ID:???もってあと一ヶ月だな俺。
0106nobodyさん
2009/05/02(土) 11:57:49ID:???>63
$rを減算する処理が直感的じゃないな。良くないアルゴリズムの部類に入る。
実際>63は意図を読み取れなかったわけだし。
性能上も、$rへの再代入が発生するので最適化がかけづらいはず。
正しく動くプログラムはサルにでも書ける。いいプログラマは人間に理解できるプログラムを書く。
0108nobodyさん
2009/05/02(土) 12:46:46ID:???0109nobodyさん
2009/05/02(土) 13:13:06ID:???安かろう悪かろうのPHP使うぐらいならJava採用する企業のほうが多いだろ
バグバグによる経済的損失に比べたらその単価差なんてたいしたことない
0110nobodyさん
2009/05/02(土) 13:23:21ID:???0111nobodyさん
2009/05/02(土) 13:32:03ID:???小規模案件はどうだろうな。大規模がスケールダウンして降ってくる数とやめる数とで、あんまり総数は変わらない気がする。
あと、PHPは始まってすらいないが、Javaは終わりつつあると思う。
いや、COBOLだってまだ頑張ってるんだし、俺らの現役期間中に食いっぱぐれる事は無いと思うけどな。
0112nobodyさん
2009/05/02(土) 13:53:15ID:???そんなに開発しやすいのかねアレ。
0113nobodyさん
2009/05/02(土) 17:10:55ID:???Webで.Netはそんな多くはないぞ?
0114nobodyさん
2009/05/02(土) 17:20:42ID:???社内システムとWEBシステムが連動し始めたってのもあるかもしれんが。
■ このスレッドは過去ログ倉庫に格納されています