トップページphp
1001コメント347KB

【PHP】下らねぇ質問はここに書き込みやがれ 27

■ このスレッドは過去ログ倉庫に格納されています
00011様2006/08/23(水) 00:54:52ID:uM5Jzzy0
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0285nobodyさん2006/08/27(日) 12:59:34ID:???
俺はいくつか礼をもらってる。
お前の回答が悪いか相手の選択を誤ってるんじゃね?
0286nobodyさん2006/08/27(日) 13:06:04ID:???
>>284
お前の回答ってどれ?
0287nobodyさん2006/08/27(日) 13:52:15ID:???
まともな質問者なら礼のひとつくらいはしてくれている。
礼が欲しくて回答者やるというのもどうかと思うけどな。
>>284はもう少し気長に構えて1ヶ月くらい続けるか、
それともいっそストレス溜まる前に止めるかした方がいいんじゃね?
0288nobodyさん2006/08/27(日) 15:38:08ID:???
>>284
どうもありがとうございました(・∀・)
0289nobodyさん2006/08/27(日) 15:59:53ID:???
直後に答が書いてあるのに気が付かない程度のやつも多いしな。
0290nobodyさん2006/08/27(日) 17:46:42ID:IIRD8PWG
質問したあとに不慮の事故で死んだかもしれんしな。
そいつの事情てもんがあるから必ず礼をすれってのも変だ。
0291nobodyさん2006/08/27(日) 17:48:29ID:IIRD8PWG
ただし、回答することは無駄では無いはずだ。
0292nobodyさん2006/08/27(日) 18:55:25ID:???
そりゃ質問後死んだとか、入院とかどうにもならない事情がない限り、礼をするのが礼儀だろ。
モラルの問題だな…。
0293nobodyさん2006/08/27(日) 19:00:35ID:???
自然言語解析してくれる自動検索エンジンとでも思ってるんだよ彼らは
0294nobodyさん2006/08/27(日) 19:50:49ID:???
質問者は最低限結果を報告してほしいな。
本当はエスパーかもしれないのに、見た目ただのボケと
区別がつかない回答は、かわいそうだ・・・
0295nobodyさん2006/08/27(日) 20:36:44ID:???
たしかに、お礼よりもむしろ経過報告や結果報告が欲しいな。
どちらにせよ質問するだけしといて放置ってのはムカつく。
0296nobodyさん2006/08/27(日) 20:43:32ID:???
そういえばWebProg板で質問したこと無いや…
0297nobodyさん2006/08/27(日) 21:02:55ID:???
「ありがとう」って言ったら負けかなと思ってる
0298nobodyさん2006/08/27(日) 21:08:06ID:???
んじゃもう回答しね
0299nobodyさん2006/08/27(日) 22:06:09ID:???
>>297
2ちゃんで質問してる時点で負けということに気付けバカ。
0300nobodyさん2006/08/27(日) 22:08:39ID:???
いつも彼女との待ち合わせに間に合うように答えてくれてありがとう(^o^)
0301(^ω^)2006/08/27(日) 22:10:24ID:???
ツンデレだね
0302nobodyさん2006/08/27(日) 22:36:35ID:???
ざっと見た限り、まともな回答にはちゃんとお礼レスがついてる。
0303nobodyさん2006/08/27(日) 22:42:01ID:???
俺もそう思う。少なくとも俺はお礼を言われなかったことの方が少ないし。
0304nobodyさん2006/08/28(月) 00:50:16ID:???
入力された内容がURLかどうか調べる方法って、↓以外にありませんでしょうか?

if(strstr($url,"http://";){
echo"これはURLです。";
}
0305nobodyさん2006/08/28(月) 00:51:35ID:???
XML形式のデータをてっとりばやく配列変数にするにはどうするのがいいでしょうか?
0306nobodyさん2006/08/28(月) 01:08:47ID:???
preg_match_all('@<[^>]+>([^<])</@', $data, $hairetu);
0307nobodyさん2006/08/28(月) 02:22:36ID:???
>>284
お前の回答参考にもならなかったけど、一応礼は言っとくよ
ご苦労さんm9(^Д^)プギャー
0308nobodyさん2006/08/28(月) 03:01:51ID:miwG/swi
2038年どうなるんだろ。
0309nobodyさん2006/08/28(月) 03:02:40ID:???
重みづけによって当選確率が決まるプログラムを作っています。
効率の悪そうなアルゴリズムしか思いつかないのでもっとスマートな方法がないか
アイディアかヒントを頂ければ

100の申し込みがあって、それぞれの申し込みには10が初期値で1〜20の重み付けが
あります。当選確率は1が一倍で2が二倍…20が20倍です。

DBから各申し込み(内容と重み付けが入っている)をとってくる。
配列か連想配列に入れる。
各申し込みを重み付けの分だけ配列の中に増やす。(ここが効率が悪そう)
そして
$tousen = array_rand($array, 1); で取り出そうかと…

もっと、賢い方法がありそうな気がするのですが、頭のいい方よろしくお願いします。
03103092006/08/28(月) 03:03:20ID:e9kKWeu6
ID表示させるの忘れました。
0311nobodyさん2006/08/28(月) 03:23:02ID:???
難しいのぅ。
100程度の入力ならその方法でいいんじゃまいか?最大2000だし。
別な方法でやるなら、重み付けの分だけ当選札を発行して、
そこからrand(1,全当選札の数)で当選番号を決めるのはどうかなぁ
0312nobodyさん2006/08/28(月) 03:41:05ID:e9kKWeu6
>>311
深夜なのにレスありがとうございます。

> 100程度の入力ならその方法でいいんじゃまいか?最大2000だし。
すみません。
例なので実際には1万の申し込みや、重みも100などいくかも知れないです。

> 別な方法でやるなら、重み付けの分だけ当選札を発行して、
> そこからrand(1,全当選札の数)で当選番号を決めるのはどうかなぁ

ちょっと理解できたかわからないのですが、こうでしょうか?
$query = 'SELECT COUNT(weight) FROM mousikomi_table';
$wight_count = query($query);
$tousen_bangou = rand(1, $weight_count);

当選番号から、どの申し込みが当たりなのかの処理も賢い方法が思いつかないです…
思いついた賢くない方法は、
配列の添え字に重みをかけて、その番号まではその申し込みの持っている当選番号として
次の添え字に行く。そして、当選番号が出てくるまで同じ処理を繰り返す…
うーん、自分ながら頭が悪いアルゴリズム…
03133092006/08/28(月) 03:58:22ID:e9kKWeu6
>>312
軽く間違えたのでもう一度。

$query = 'SELECT SUM(weight) FROM mousikomi_table';
$wight_count = mysql_query($query);
$tousen_bangou = rand(1, $weight_count[0]);

for ($i=0; $i < count($mousikomi); $i++) {
$total_bangou = $tousen_bangou + (1 * $mousikomi['weight']);
if($tousen_bangou <= $total_bangou) { print "当選した申し込みです。"; last;}
}

forで当選番号が見つかるまで探しつづけるあたりが頭悪い感じが…
0314nobodyさん2006/08/28(月) 05:25:53ID:???
>>309
その場合、申し込みテーブル1つで抽選の時だけの工夫だったら
どうやっても速くならないんじゃないかな。

>>311の言ってる方法だと思うけど
当選札テーブルを用意して、申し込みや重みの変動があった都度
当選札を発行して入れておくといいと思う。

>>309が最初に言ってた方法を抽選の時にまとめてじゃなくて
変化があった時に分散する感じ。

もっと頭いい方法あるのかもだけど俺が思いつくのはそのくらい。
0315nobodyさん2006/08/28(月) 07:27:23ID:???
商品を格納する配列を作るんだけど、10万あるんだよね。
連想配列 10万って大丈夫?
0316nobodyさん2006/08/28(月) 08:28:29ID:???
ムリ
0317nobodyさん2006/08/28(月) 08:29:43ID:???
>>315 自分で試してみれ

<?php
$ar['0']='abc' ;
for($i=0 ; $i<100000 ; $i++){
 $ar['index'.$i]="$i" ;
}
?>
俺の環境では大丈夫だった
0318nobodyさん2006/08/28(月) 08:51:34ID:???
10万もの連想配列メモリにもつのって…
ふつうにDBがよくね?
0319nobodyさん2006/08/28(月) 09:14:23ID:???
やぁ、久し振りにここ来たら面白い展開になっているね。

>>304
マニュアル見て考えてみれ。
http://www.php.net/manual/ja/function.parse-url.php

>>192
亀レスだが、PHP以外の言語をいじったことあるか?
マニュアルに書いてあるTRUEとかFALSEとか戻り値とかの意味わかるか?

多分、おまいは基礎の基礎をすっとばして、いきなり応用に入ろうとしているんだろ。
0320nobodyさん2006/08/28(月) 09:51:05ID:???
どこが面白いのかさっぱり
0321nobodyさん2006/08/28(月) 10:07:23ID:8XzpZNhh
PHPで株のローソク足を表示させてあげることって可能でしょうか??
矩形をたくさん表示させようと思っております
0322nobodyさん2006/08/28(月) 10:24:25ID:???
こないだ質問しにきた人間ですが・・・
世の中こんな人もまだまだいるんだなぁとちょっとほっとした。

私は配列。
0323nobodyさん2006/08/28(月) 10:56:23ID:???
>>321
できる
0324nobodyさん2006/08/28(月) 11:19:40ID:???
初歩的な質問ですいません。(間違ってプログラム板で質問してしまいました・・)

if($Cid==$line[1] or $Cid==$line[2] or $Cid==$line[3] or $Cid==$line[4] or
$Cid==$line[5] or $Cid==$line[6] or $Cid==$line[7] or $Cid==$line[8] or.................
$Cid==$line[100]) {
をなんとか一文ですっきりする方法はないのでしょうか?
例えば
if($Cid==$line[1から100]) {
のような感じです。
0325nobodyさん2006/08/28(月) 11:23:03ID:???
>>324
>>178
0326nobodyさん2006/08/28(月) 11:38:06ID:???
煽ってる奴らもしつこいな
0327nobodyさん2006/08/28(月) 11:44:09ID:???
一行ですっきりは無理だけどループ使えば良いじゃん
見た目はすっきりと良くなるよ
0328nobodyさん2006/08/28(月) 12:13:01ID:???
>>327

for($i=0 ; $i<100 ; $i++){
if($Cid == $line[$i]){
$flag = "hogehoge";
break;
}
}

つーことね。
in_arrayで考えてたから逆に思いつかなかったw
0329nobodyさん2006/08/28(月) 12:40:13ID:???
in_arrayネタいい加減姿慎めよ
03303242006/08/28(月) 12:43:55ID:???
>>329
in_arrayってなんですか?
03313282006/08/28(月) 12:52:42ID:???
>>329
ゴメン。もう書かない(;´Д`)
03323092006/08/28(月) 12:55:31ID:tNKhmn4z
>>314
ID変更になりますが…309です。

仮のテーブルを作って早くなるなら作ろうと思います。

申し込みはフィックスされたら変更されないのですが重みは
何回も抽選するのでそのたびに変更されます。
なので重みを先に計算させるのはむずかしそうです…

なんとか分散する方法を考えてみます。

当選番号から元の申し込みの添字を見つける計算アルゴリズムもいいのが
浮かびそうな気がしてきました
03332042006/08/28(月) 13:42:22ID:Uc4lvqbT
前に質問したものです。
UrlEncode()したURLをhotmailに送るとメール画面ではきちんと表示されてるのに
クリックするとエンコード部分が文字化けしています。
やっぱり直りません。orz
0334nobodyさん2006/08/28(月) 13:47:28ID:???
>>323
サンクス
できるのか ポスグレと連携させるつもりで勉強してみようかな
0335nobodyさん2006/08/28(月) 13:52:23ID:???
>>305
たとえばこんなの
$sxml=simplexml_load_string($xmlstr) ;
$ar=get_object_vars($sxml) ;
0336nobodyさん2006/08/28(月) 14:25:31ID:???
>>321
JpGraphを利用することで簡単に表示できる

しかし、リアルタイム(例:Tickデータを受け取ったら即表示)が
できるのかは不明

他の方法があるかもしれない
それは俺も教えて君だ
0337nobodyさん2006/08/28(月) 14:45:10ID:???
>>321
あれだ、幅1px、高さ1pxのGIFを用意して、実際表示させる時に
高さと幅を指定しなおせば、グラフに見えるんじゃないかな?
0338nobodyさん2006/08/28(月) 14:57:14ID:???
ローソクチャート作るとなると本体とヒゲがあるから単純に1pxのgifだと厳しい・・・
と、思ったが陰陽で色分けて横5pxで真ん中に1px書いたgifなら伸ばすだけでOKか。

高さはCSSで調整すればいけそうだな。
0339nobodyさん2006/08/28(月) 15:26:56ID:???
素直にFlashを使ったほうがよさそうだなw
0340nobodyさん2006/08/28(月) 15:41:47ID:???
>>339
それは言わない約束だろうw
0341nobodyさん2006/08/28(月) 15:55:40ID:6Eu/aWep
phpでperlのgrepの実装をスマートにやる方法ってある?
0342nobodyさん2006/08/28(月) 16:10:51ID:???
>>341
preg_grep関数使えばよくね?
0343nobodyさん2006/08/28(月) 16:15:37ID:???
>>342
パターンで絞込みたいだけならpreg_grepでいいんだけど、
それ以外の何かフィルタ的な処理をしたい時に使えないんです
0344nobodyさん2006/08/28(月) 16:29:31ID:???
>>343
Perlのgrepってパターンしか使ったこと無かったけど、

grep(評価式, 配列)

の評価式ってパターンマッチ以外でもいいのか?
0345nobodyさん2006/08/28(月) 16:35:22ID:???
>>344
@array = grep { 〜 } @array;
のブロック渡す方のやつです
0346nobodyさん2006/08/28(月) 16:44:10ID:???
>>345
array_filter関数だな。
直接文を入れることは出来ないが、コールバック関数で同様の処理ができる
0347nobodyさん2006/08/28(月) 17:21:12ID:???
>>346
array_filterとcreate_functionでいけそうです
どうもっす
0348nobodyさん2006/08/28(月) 18:28:35ID:???
>>338 いずれ解るが、5つに分けて3種類のビットマップを配置することになる
0349nobodyさん2006/08/28(月) 19:16:03ID:Fg0vDOCr
パスの区切り文字を表す定数ってありませんか?
Windowsだと /(半角スラッシュ),UNIXだと \(逆スラッシュ)
と展開されるような。
0350nobodyさん2006/08/28(月) 19:48:39ID:???
文字列を16進数に変換する関数ってありますか?
0351nobodyさん2006/08/28(月) 19:53:19ID:???
>>349
DIRECTORY_SEPARATOR
0352nobodyさん2006/08/28(月) 20:00:18ID:???
>>350
bin2hex()
0353nobodyさん2006/08/28(月) 20:00:19ID:???
>>349
テストするのが面倒なのでマニュアルの定数のページだけ見て答えるが、
DIRECTORY_SEPARATOR じゃまいか?
0354nobodyさん2006/08/28(月) 20:00:23ID:???
>>349
Windowsで/
Unixで¥
に展開はちょっと…。
0355nobodyさん2006/08/28(月) 20:03:27ID:B31oQAMb
>>347

ねぇ、in_array って何さ? 意地悪しないでいい加減教えろよっ

0356nobodyさん2006/08/28(月) 20:07:07ID:???
>>352
ありがd!
0357nobodyさん2006/08/28(月) 21:58:27ID:???
>>355
何で>>347に聞いてるのか分からんがコレドゾー

つ【http://jp2.php.net/in_array
0358nobodyさん2006/08/28(月) 22:57:36ID:???
>>357
こんな短縮形式のURLでもいけるのね
何気に知らなかった
0359nobodyさん2006/08/29(火) 01:35:18ID:???
基本的な質問かもしれないんですが、
登録ボタンを押したあとINPUTのTEXTの中の文字列をurlencodeするのってどうやればいいんでしょう?
なんか、POSTで文字列を取ってきたら一部漢字が文字化けしちゃうんです。
03603052006/08/29(火) 01:35:46ID:???
>>335
これってPHP5なんですね…。
でも参考になりました。ありがとうございました。
0361nobodyさん2006/08/29(火) 01:44:21ID:???
>>359
それはなんだ?表示したら化けちゃうのか?
0362nobodyさん2006/08/29(火) 01:48:34ID:???
>>359
マルチバイト系の文字エンコーディング関連の関数を軒並み調べてみろ。
0363nobodyさん2006/08/29(火) 02:04:58ID:???
↑またお礼がもらえないとか泣き出すことになるぞ・・・
03643592006/08/29(火) 02:08:11ID:???
何かしらの関数を使うのはわかるんですが、

<input type="text" name="aaa">
<input type="submit" value="OK">
こうなってる奴のOKを押したあと
再度よみこむ前に変換作業などするにはどうしたらいいのか分からなくて。
0365nobodyさん2006/08/29(火) 02:46:04ID:???
もっと具体的事象を挙げて貰わないと困る。

どうせ、お前の言ってる文字化けとかいうのは「表\示」とかそんなレベルだろ。
03663592006/08/29(火) 03:02:21ID:???
>>364のOKを押したあと読み込まれるphpファイルの一番上で<?PHP if($_POST['aaa']){print $_POST['aaa']."<BR>\n";} ?>
をやるとすでに文字化け(?)してるんですよ。
化けるのは
予→?
予定→予定
無→?
無事→無事
無敵→?遵・BR>
こんな感じです。
表示は表\示には化けませんでした。
というか、たぶんそれ以前の問題で
INPUTのtextの値をどうやっていじって変換するのかが分からない状態でして。
0367nobodyさん2006/08/29(火) 03:03:24ID:???
>>364
つくづくバカだなお前も。
PHPの勉強をする前に、質問の仕方を勉強しろ。

俺たちはエスパーじゃないから、お前の心の中を読み取ることは出来ない。
0368nobodyさん2006/08/29(火) 03:10:39ID:???
ヘッダやHTMLでちゃんと日本語の文字コード指定してるかどうか、だな。
多分、してないんだろう。
0369nobodyさん2006/08/29(火) 03:12:56ID:???
header("Content-Type: text/html; charset=EUC-JP");
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">

これは書いてるんですけど他にも指定が必要です?
0370nobodyさん2006/08/29(火) 03:16:27ID:???
一度に答えを求めるんじゃなく、まず確認
Winな「メモ帳」で
<?php
phpinfo();
?>
を呼ばれるファイル名で保存してサーバにアップ
呼ぶファイルを呼び出してsubmitすると下のほうにPOSTされた
データが表示されるからどうなってるか確認
03713592006/08/29(火) 03:27:18ID:???
>>370
>>366と同じでした
0372nobodyさん2006/08/29(火) 03:37:51ID:???
>>359
php.ini の mbstring.encoding_translation や mbstring.http_input、mbstring.http_ouput あたりの設定かもな。
0373nobodyさん2006/08/29(火) 03:45:10ID:???
>>372
phpinfoを見ると

mbstring.encoding_translation on on
mbstring.http_input auto auto
mbstring.http_output EUC-JP EUC-JP
mbstring.internal_encoding EUC-JP EUC-JP

になってました。
0374nobodyさん2006/08/29(火) 06:25:04ID:N+TQF1f0
くそくだらない質問です。
$l = "2ch\nhtml\nxml\nphp\nperl";
explode("\n",$l);

$fp = fopen(log.txt , w);
while(!feof($fp)){

fputs($fp , $l[$b]);

$b++;

}

fclose($fp);

こんな風にしてみたんですが、実行すると、「致命的なエラー」が発生してしまいます。
fputs($fp,$l[$b]);
の変がおかしいと思うのですが、原因がわかりません。

どなたか教えてください。、
0375nobodyさん2006/08/29(火) 06:45:07ID:???
>>374
>explode("\n",$l);
explodeしたのに変数に入れてなくない?
0376nobodyさん2006/08/29(火) 06:48:28ID:???
変数$bに0入れて
0377nobodyさん2006/08/29(火) 06:56:09ID:???
> while(!feof($fp)){

このループは読み込む時に使う
foreachをexplodeで出来た配列に使うべし
0378nobodyさん2006/08/29(火) 06:59:08ID:???
っていうか

$l = "2ch\nhtml\nxml\nphp\nperl";
$fp = fopen('log.txt', 'w');
fputs($fp, $l);
fclose($fp);

でよくね?
0379nobodyさん2006/08/29(火) 07:11:38ID:???
>>373
入力文字が短すぎて文字コードの自動判定に失敗している
入力文字コードを変換する必要はまずないので
mbstring.encoding_translation を offにしる
php.iniも.htaccessもいじれないならformの一番最初に判定用のダミーデータを入れる
<input type="hidden" name="autodetect" value="美乳">
0380nobodyさん2006/08/29(火) 07:47:12ID:???
>>369
>>362
0381nobodyさん2006/08/29(火) 10:22:40ID:N+TQF1f0
こんなどうしようもない質問にみなさんありがとうございます。。

>>375
え。、、私explode関数すごい変な思い違いしてたかもしれないです。

$lを\nで区切ってくれるような関数だった気が・・・ 

>>376
やってみたんですが・・・

>>377
そうなんですか
すいません無知で><

>>378
確かにそれで良いのですが、最終的にフォームから送信された名前とコメントを結合して云々候みたいな
ことがしたいので、できればexplode関数使いたいのです。
0382nobodyさん2006/08/29(火) 10:31:05ID:???
>>381
explodeは確かに区切る関数だが、区切った結果は戻り値で返る。
× explode("\n", $l); // $lは何も変化しない
○ $l = explode("\n", $l); //$lは改行ごとに分割された配列に変わる
0383nobodyさん2006/08/29(火) 10:34:57ID:???
>>381
あとちなみに、「致命的エラー」になるのはwhile()の条件のせいだと思う。
それだと絶対に終了できないので永久ループになる。
0384nobodyさん2006/08/29(火) 10:37:17ID:N+TQF1f0

>>375さん、ありがとうございます><


解決しました^^

ありがとうございます
■ このスレッドは過去ログ倉庫に格納されています