1 名前:nobodyさん mailto:sage [2009/04/06(月) 04:14:58 ID:???] 質問者はまず>>1 を良く読むこと(必須!) 過去スレ、関連スレ、FAQなどは>>2-10 辺り 次スレは>>980 が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。 ◆前スレ 【PHP】下らねぇ質問はID出して書き込みやがれ 82 pc11.2ch.net/test/read.cgi/php/1236532468/ ◆質問用テンプレ 【OS名】vine linux 【PHPのバージョン】php5.26 【連携ソフトウェア】mysql 【質問内容】 ◆質問する時の注意 ・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す) ・ 己の行った操作、変更などを詳しく明記すること。 ・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。 ・ 質問者として、態度をわきまえること。 ・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。 (PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。) ◆質問後の注意 ・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。 ・解決しなくても回答をもらった場合はお礼を言うこと。 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。) ◆回答者への注意 ・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。 【その他諸注意】 ・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
98 名前:nobodyさん mailto:sage [2009/04/08(水) 13:16:47 ID:???] pregだと数値か文字列か判別できんだろ
99 名前:95 [2009/04/08(水) 13:45:02 ID:cjj/9xGO] ちょっと質問を補足します。 あるリクエストパラメータが、通常の正の整数(の文字列化)になっているか を判別したいのです。 リクエストパラメータは文字列ですから、is_int()は使えません。 is_numeric()はある程度使えますが、"+0123.45e6"もtrueになってしまいます。 ・trueとなってほしい値。 "1", "0001", "132", etc... ・falseとなってほしい値 "0", "-1", "1.0", "0xFF", "+0123.45e6", etc... これにかなうのは、 preg_match('/^\d*[1-9]$/', $param) しか思いつかないのですが、他に何か良い方法はないでしょうか?
100 名前:nobodyさん mailto:sage [2009/04/08(水) 13:48:37 ID:???] >>99 それ、間違ってるだろ。とりあえず。 preg_match('/^[1-9]+\d*$/D', $param)
101 名前:nobodyさん mailto:sage [2009/04/08(水) 13:49:06 ID:???] "+1"はどうなのよ"+0"はどうなのよ
102 名前:95 [2009/04/08(水) 13:56:41 ID:cjj/9xGO] >>100 それは >>99 の "0001" が trueになりませんし、 "0"がtrueになってしまいます。 >>101 どちらもfalseです。trueになるのは"正の整数"と>>95 ,>>99 で書いています。 あと、符号を含むものはfalseのつもりでした。 しかしこの流れだと、正規表現以外なさそうですね。
103 名前:nobodyさん mailto:sage [2009/04/08(水) 14:01:54 ID:???] ちょっとPHPカテゴリを辿ってみたけど php16.exblog.jp/6067489/ 【結果】 strpos = 1.4秒 preg_match = 7.0秒 ・・・あー・・・結構違いますね・・・。 寝ます。 php16.exblog.jp/4940100/ 上記の結果は・・・ "1234" の出力になります。("1212"じゃなく) つまり、static宣言した変数の値は メソッド呼び出し元のインスタンスが変わっても保持されています。 なんでこうなってんだろう? とか言ってるレベルの奴のblogだぞ?
104 名前:95 [2009/04/08(水) 14:13:53 ID:cjj/9xGO] >>103 引用したページが私の質問の意図をうまく説明するものだったので貼りました。 他のページが全部間違いでも問題ないと思います。
105 名前:nobodyさん mailto:sage [2009/04/08(水) 14:15:08 ID:???] is_numeric って is_numeric("0xFF"); // 16進表記 や is_numeric("+0123.45e6"); // 指数表記 をTRUEとしてしまうようです。(マニュアルに書いてありますけどね) マニュアルに書いてあるんじゃん
106 名前:nobodyさん mailto:sage [2009/04/08(水) 14:16:58 ID:???] >>95 それ10の倍数だとfalseだけど。 ctype_digit($param) && $param > 0 でいいんじゃないの。
107 名前:95 mailto:sage [2009/04/08(水) 14:24:10 ID:???] >>106 ご指摘のバグは今さっき気づいたところです。 > ctype_digit($param) && $param > 0 まさに望みどおりのものです。ありがとうございます。
108 名前:95 [2009/04/08(水) 14:24:40 ID:cjj/9xGO] あ、下げてしまった。>>107 は私です。では失礼します。
109 名前:nobodyさん mailto:sage [2009/04/08(水) 14:44:33 ID:???] 何か俺が作るサイトはデザインが自分でも悪い。 何かみてくれをよくするテクニックを纏めたオススメの書籍はありますか?
110 名前:nobodyさん mailto:sage [2009/04/08(水) 15:09:24 ID:???] 認識してるのにデザインが悪いと思うってことはなにかと比べてるからだと思うが その比べてるデザインの優れたと思うものを真似してみればどうだろう 好みなんて人それぞれだし万人が好むと思って押し付けても違ったりするから
111 名前:nobodyさん mailto:sage [2009/04/08(水) 15:23:02 ID:???] デザインは板違いじゃないか?
112 名前:nobodyさん mailto:sage [2009/04/08(水) 15:31:12 ID:???] >>109 いくらみてくれはよかっても、アフィをみてほしいのか記事(内容)をみてほしいのか 意味不明なサイトじゃなきゃ問題ない。 もちろん見た目は大事だけど内容と見易さ(使いやすさ)だよ。
113 名前:nobodyさん mailto:sage [2009/04/08(水) 16:59:27 ID:???] >>109 このスレではPHPの文法以外のことを聞いても、あんまり答えは返ってこない。 悪いこと言わないから、この辺↓に移動して聞きなおしたほうがいいと思うよ。 Webサイト制作初心者用質問スレ Part 208 pc11.2ch.net/test/read.cgi/hp/1238669869/
114 名前:nobodyさん mailto:sage [2009/04/08(水) 17:31:21 ID:???] >>107 バグて。 仕様だろ。
115 名前:nobodyさん [2009/04/08(水) 17:39:59 ID:9xKyaeca] SQLとファイル、どっちをデータ保存に使うか?ってよく出る話題ですが、 たとえばチャットシステムのように 数秒単位でデータの挿入、更新、削除が行われる場合ってどっちがいいんでしょうか。 どっちでも扱いやすいほうで、構いませんか?
116 名前:nobodyさん mailto:sage [2009/04/08(水) 17:42:13 ID:???] パフォーマンス計ってみればいいじゃん
117 名前:nobodyさん mailto:sage [2009/04/08(水) 18:13:22 ID:???] 好きな方でいいよ
118 名前:nobodyさん mailto:sage [2009/04/08(水) 18:20:30 ID:???] >>110 >>112 サンクス 先ずは、見易さ第一に作り次に自分が綺麗と思うサイトのHPのデザイン を真似する事から始めます。 ※真似されたHPの管理人は怒るかもしれませんが。
119 名前:nobodyさん mailto:sage [2009/04/08(水) 20:24:35 ID:???] チャットでパフォーマンスが気になるなら共有メモリとかにした方がいいんじゃないの。 使ったことないけど。
120 名前:nobodyさん mailto:sage [2009/04/08(水) 22:25:24 ID:???] >使ったことないけど
121 名前:nobodyさん mailto:sage [2009/04/08(水) 22:26:15 ID:???] >>115 俺の意見だと、ファイル保存が良いと思う。 アクセス解析作るのに使っている。 ただ、扱いやすいとは言えない
122 名前:nobodyさん [2009/04/08(水) 23:16:49 ID:tkomkeAN] 取得したいページをfile_get_contentsで取りたいのですが、 url先とは違う内容が$fileに入ってしまいます 関数一覧のページなんですがどのようにしてしっかり取得することができるのでしょうか? <?php $file = file_get_contents("jp.php.net/manual/ja/indexes.php ";); echo $file; ?>
123 名前:nobodyさん mailto:sage [2009/04/08(水) 23:33:25 ID:???] はい?違う内容って?
124 名前:nobodyさん [2009/04/09(木) 00:04:47 ID:m7XTC3qO] 【OS名】linux 【PHPのバージョン】php5.2.5 【質問内容】 文字列の中から英数字の部分だけを抽出したい場合は、どうやればいいでしょうか? $str = 'あああaaa_いいいiii_ううう-20090401'; : echo $result; // aaaiii20090401 と表示される ereg("[a-zA-Z0-9]+", $str, $regs); $result = $regs[0]; echo $result; だと「aaa」しか取得できませんでした。
125 名前:nobodyさん mailto:sage [2009/04/09(木) 00:35:29 ID:???] >93 基本は、ループの頭に差し掛かった時点でループ回数が分かる場合はfor。 ループを回してみないと分からない場合はwhile。 whileの場合はループ変数がどう変わるかを意識しながらコードを読まなければいけない。 forならば基本的にループ回数はループに入る時点で分かるので、ラクに読める。 ただまあ、例外はいっぱいある。 「1000以下の3の倍数を全て列挙」なんて場合、事前にループ回数を調べる事はできる。 だけど、「変数が1000を超えるまで繰り返す」という意図ならば、それを反映してwhileで書いた方が読みやすいわけで。 一般論にするなら、自分の意図がもっとも読者に伝わりやすい表現を選べ、という事になる。
126 名前:nobodyさん mailto:sage [2009/04/09(木) 01:26:24 ID:???] >>91 、>>92 、>>94 ありがとう、それでよかったんですね。
127 名前:nobodyさん [2009/04/09(木) 02:12:40 ID:8Md27rPN] [とか]ってURLエンコードする必要ありますか? ある文字がURLエンコードするべきかどうかってどうやって判断すればよいでしょうか? 初心者的な質問ですいません。。。
128 名前:nobodyさん mailto:sage [2009/04/09(木) 02:19:15 ID:???] >>127 ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
129 名前:nobodyさん mailto:sage [2009/04/09(木) 03:11:40 ID:???] >>127 RFC1738とその関連文献を見るといいよ
130 名前:nobodyさん mailto:sage [2009/04/09(木) 05:12:24 ID:???] グーグルランクをPHPで取得する方法がわかりません
131 名前:130 [2009/04/09(木) 05:15:38 ID:sBmn/pA0] グーグルランク取得したいです。PHPで でも、その方法が調べてもわからないんです PHP暦は一年でそこそこです
132 名前:124 mailto:sage [2009/04/09(木) 08:53:26 ID:???] >>130 詳しく見てないけど、結構情報があるみたいですよ Google rank 取得方法 の検索結果 約 321,000 件 www.xdelta.net/blog/FreeBSD/2006/01/31/p134 Googleのページランクを知りたい場合は、対象となるURLとともに、そのURLのch値といわれるチェックサムが、Googleに問い合わせする際、必要になる。 ch値の算出方法については、しばらく謎とされてきたが、 Google PageRank Checksum Calculator で、そのアルゴリズムが公開されてる。 mlog.euqset.org/archives/php-users.php.gr.jp/33290.html [PHP-users 33290]スクリプトでのGOOGLE pagerank取得について (続) ○ クラスに書き直したソースコードを公開しました デモ linux.ohwada.jp/demo/google_pagerank/ 説明 linux.ohwada.jp/modules/smartsection/item.php?itemid=397 ダウンロード linux.ohwada.jp/modules/wfdownloads/singlefile.php?cid=8&lid=98 ↑この「説明」ページに、PHPでGoogle Rankを取得する方法が解説されていました。
133 名前:nobodyさん mailto:sage [2009/04/09(木) 09:01:18 ID:???] >>124 preg_match_all("/[a-zA-Z0-9]+/", $str, $regs); $result = implode("",$regs["0"]);
134 名前:nobodyさん mailto:sage [2009/04/09(木) 09:03:14 ID:???] 正規表現(笑)
135 名前:124 mailto:sage [2009/04/09(木) 09:12:16 ID:???] 自己解決しました。 $str = 'あああaaa_いいいiii_ううう-20090401'; preg_match_all("([a-zA-Z0-9]+)", $str, $matches); $regs = $matches[0]; foreach($regs as $reg) { $result .= $reg; } echo $result; どうもありがとうございました>>124
136 名前:124 mailto:sage [2009/04/09(木) 09:14:20 ID:???] >>133 implodeを使えば良いんですね! どうもありがとうございます。
137 名前:124 mailto:sage [2009/04/09(木) 09:19:33 ID:???] >>134 正規表現(涙)は、一度本を読んだんですが、頭に入らないです>< 誰かチートシート(早見表)を作って配布してくれないですかね? …てか、言いだしっぺ=自分で叩き台を作って、ここで添削してもらえばいいかな?
138 名前:124 mailto:sage [2009/04/09(木) 09:44:05 ID:???] PHPの正規表現は、 (1) Perl互換の正規表現 jp.php.net/manual/ja/book.pcre.php (2) POSIX拡張の正規表現 jp.php.net/manual/ja/book.regex.php の2種類が用意されてるんですね。 ↓Perl互換の正規表現(PCRE)のチートシートは配布されてました。 phpspot.org/blog/archives/2006/07/phppcre.html ↓チートシートじゃないけど、正規表現で使えるパターンのまとめ www.rider-n.sakura.ne.jp/regexp/regexp.php PHPのマニュアルでは処理速度が違うとあったけど、それぞれ一長一短があるのでしょうか? =使い分ける場合の基準はあるのかな? php-web.net/regular/posix.html PHPでは、Posix拡張正規表現を利用することができます。 Posixとは、Portable Operating System Interface for UNIX の略で、 Linux を始めとする Unix 互換OSが満たすべき仕様を定めたものです。 Perl互換正規表現よりも機能は限定されていますが、汎用性は高いです。 POSIX互換正規表現<PERL互換正規表現ということで、簡単に済む場合はPOSIX、複雑な場合はPCREの出番になるのかな? 正規表現でうまく処理できない場合は、ANTLRという文字処理のライブラリを使えばいいそうですけど、PHPでANTLRが使えるライブラリとか配布されているんでしょうか? pg.thumbnailcloud.net/data/frame_252694.aspx
139 名前:nobodyさん [2009/04/09(木) 10:21:07 ID:3wJSGAQj] mkdirでディレクトリを作成する時、開発環境(WinXP)では簡単に作成されますが、 ネットのLinuxサーバ上ではパーミッションの問題で作成出来ない場合があります。 その場合、「パーミッションエラーで作成できない」事を 伝える必要があると思うのですが、そう言うことを調べる関数ってあるのでしょうか?
140 名前:nobodyさん mailto:sage [2009/04/09(木) 10:32:12 ID:???] やったことないけどディレクトリを作成する親でぃれくとりがis_executableかどうかでできないかな
141 名前:nobodyさん mailto:sage [2009/04/09(木) 10:37:10 ID:???] >>139 レンタルサーバだと、モジュール版のPHPがセーフモードに設定されていることが原因で、mkdirの利用が制限されている場合もありますね。 jp.php.net/manual/ja/function.mkdir.php 返り値 成功した場合に TRUE を、失敗した場合に FALSE を返します。 ↑mkdirの返り血(FALSE)を浴びるだけではダメですか?
142 名前:139 [2009/04/09(木) 11:15:45 ID:3wJSGAQj] >>140-141 つまり、単純に if(!mkdir("test")){ die("ディレクトリが作成できませんでした。パスかパーミションを確認して下さい。"); } みたいな感じで良いですかね?
143 名前:nobodyさん [2009/04/09(木) 12:52:32 ID:GoKaiEbv] vistaでphp5.2.8とapache2.2使ってます ローカルの特定のファイルをfile_get_contentsで取得したいのですが 以下ではfailed to open streamで開けませんでした $filenameをlocalhost/index.html から127.0.0.1/index.html $filename = "localhost/index.html "; $file = file_get_contents($filename); echo $file; q.hatena.ne.jp/1202255873 を見てhostファイルが原因だと思うのですが どのようにhostファイルを書き換えればよろしいでしょうか?
144 名前:nobodyさん [2009/04/09(木) 12:53:27 ID:GoKaiEbv] すいません4行目途中でした 全文修正版です↓ vistaでphp5.2.8とapache2.2使ってます ローカルの特定のファイルをfile_get_contentsで取得したいのですが 以下ではfailed to open streamで開けませんでした $filenameをlocalhost/index.html から127.0.0.1/index.html に直すと取得できました $filename = "localhost/index.html "; $file = file_get_contents($filename); echo $file; q.hatena.ne.jp/1202255873 を見てhostファイルが原因だと思うのですが どのようにhostファイルを書き換えればよろしいでしょうか?
145 名前:nobodyさん [2009/04/09(木) 12:59:56 ID:pGRnXLlI] 以下のような多次元配列があります これを1次元に直したいのでforeachを使いました $ary[0][0]=1; $ary[0][1]=2; $ary[0][2]=3; $ary[0][3]=4; $ary[0][4]=5; $ary[0][5]=6; foreach($ary as $v) { foreach($v as $vv) $h[] = $vv; } 標準関数か何かでこれよりもスマートなやり方があった記憶があるのですがどなたかご教示お願い致します
146 名前:nobodyさん mailto:sage [2009/04/09(木) 13:35:58 ID:???] 関数じゃないけど $h= $ary[0]; とか??
147 名前:145 mailto:sage [2009/04/09(木) 13:44:57 ID:???] >>146 とても効率の良いものですね ありがとうございます
148 名前:nobodyさん [2009/04/09(木) 14:51:46 ID:IIKZIRWt] Imagick::roundCornersで画像の角を丸めると、 背景がいつも黒になってしまうのですが、 どのように設定すればよいのでしょうか?
149 名前:nobodyさん [2009/04/09(木) 16:01:29 ID:OhmeRcsr] PHPの関数についてググるとヘルプのミラーサイトが結構でてきます ミラーサイトは公式サイトに断らなくても公開してもいいのでしょうか? また、公式サイトで公開されているhtml形式のヘルプをダウンロードしてそのまま自分のレン鯖においても問題ないでしょうか?
150 名前:nobodyさん mailto:sage [2009/04/09(木) 16:32:39 ID:???] 自分でライセンス確認すれや
151 名前:nobodyさん mailto:sage [2009/04/09(木) 16:37:45 ID:???] 既にあるものをなんで公開しようと思うの?どうして?死ぬの?
152 名前:nobodyさん mailto:sage [2009/04/09(木) 17:05:12 ID:???] >>151 それをミラーサイト全ての管理人に言ってくださいませんか
153 名前:nobodyさん mailto:sage [2009/04/09(木) 19:50:40 ID:???] >>149 SEO対策なのかな? PHPの公式マニュアルよりも、検索結果で上位に来るミラーサイトが多いですよね 自分の場合は、PHPの公式マニュアルをブラウザのお気に入りに入れてます。 jp.php.net/manual/ja/ google検索でヒットした結果を、改めてPHPの公式マニュアルで確認すればOK
154 名前:nobodyさん mailto:sage [2009/04/09(木) 19:57:07 ID:???] >>150 は初心者で自分も調べ方知らないだけだろ
155 名前:nobodyさん [2009/04/09(木) 23:15:50 ID:YWPkP/9r] test.phpをテキストファイルとして出力させるのですが このときブラウザの青い帯の部分(タイトルが表示される部分)に 任意の好きなタイトルを表示させたいのですが不可能でしょうか? どなたかご教示お願い致します 【test.php】 <?php header("Content-Type: text/plain"); echo "test"; ?>
156 名前:nobodyさん mailto:sage [2009/04/09(木) 23:32:12 ID:???] 青い帯の部分… えっとね。君にはまだphp早い。 まずはwww.w3.org/ から始めよう。 ここを理解したらwww.apache.org/ いって最後にwww.php.net/ 。 その青い帯作ってる糞マイクロソフトにも言っておいて。www.w3.org/ を50万回読めと。
157 名前:nobodyさん mailto:sage [2009/04/09(木) 23:40:47 ID:???] バカのくせにえらそうに
158 名前:nobodyさん mailto:sage [2009/04/10(金) 00:12:42 ID:???] >>156 たぶん君も知識が足りないと思うんだがfxのタイトルバーの色が何色か見てごらん あとoperaもな 大丈夫^^?
159 名前:nobodyさん mailto:sage [2009/04/10(金) 00:18:26 ID:???] 今時WebKitじゃないブラウザーとか・・・・ゴミいか。 角丸つくるのにいまだに透過ジフ?w
160 名前:nobodyさん mailto:sage [2009/04/10(金) 00:22:27 ID:???] headerでjavascriptのコード埋め込めば任意のタイトルにできるんじゃない?
161 名前:nobodyさん mailto:sage [2009/04/10(金) 00:27:38 ID:???] >>159 それはないよ WebKitはJavaScript周りがだめだめ
162 名前:nobodyさん [2009/04/10(金) 00:28:34 ID:z5toBuCm] PHP5.2使ってます。 ファイルを一意な名前で renameする良い方法ないですか? tempnam を使ってファイル名を生成すると、その時点でファイルが生成されてしまうため、 renameできません。tempnam で作った後に unlinkするのは、やっぱり気分が良くないし、 厳密には一意性が保証されない気がするので。
163 名前:nobodyさん mailto:sage [2009/04/10(金) 00:29:13 ID:???] タイトルをHTTP Headerでどうにかするのは無理 <title>好きなタイトル</title>を出力するしかない
164 名前:nobodyさん mailto:sage [2009/04/10(金) 00:31:59 ID:???] >>162 renameという標準関数がある
165 名前:nobodyさん [2009/04/10(金) 02:28:23 ID:bYC4ar8C] staticなメソッドの中で、 それがHoge::moge()の形で呼ばれたのか、 $hoge->moge()の形で呼ばれたのかを判別するにはどうしたらいいですか?
166 名前:nobodyさん mailto:sage [2009/04/10(金) 02:53:25 ID:???] $thisを見るとか?
167 名前:nobodyさん mailto:sage [2009/04/10(金) 05:12:52 ID:???] >>165 そもそもstaticなメソッドをthisからメンバ関数として呼ぶべきじゃないよ
168 名前:nobodyさん mailto:sage [2009/04/10(金) 09:47:55 ID:???] static全否定?
169 名前:168 mailto:sage [2009/04/10(金) 09:48:47 ID:???] ああ、ごめん勘違い
170 名前:nobodyさん [2009/04/10(金) 10:13:06 ID:0gMhmbJC] どなたか>>149 もお願い致します
171 名前:nobodyさん [2009/04/10(金) 10:32:51 ID:BYyPBH+i] foreach を 配列の途中から始めることはできますでしょうか? このような場合はforを使うのが普通なのでしょうか? よろしくお願いします。
172 名前:nobodyさん mailto:sage [2009/04/10(金) 10:38:07 ID:???] >>171 >foreach を 配列の途中から始めることはできますでしょうか? できないけど結果として同じものを得るのは可能 >このような場合はforを使うのが普通なのでしょうか? はい
173 名前:171 [2009/04/10(金) 10:53:33 ID:BYyPBH+i] >>172 レスありがとうございます。 やはりforを使うのが普通なのですね。 いちおう、後学のためにforeachを使って途中から開始する方法も教えていただけないでしょうか?
174 名前:nobodyさん mailto:sage [2009/04/10(金) 10:58:47 ID:???] forで初期indexがわかってる時しか使えないでしょ。 seekしてiterator使った方がいいよ。
175 名前:nobodyさん mailto:sage [2009/04/10(金) 11:03:41 ID:???] >>173 途中から開始するわけではなくて無駄な分はしっかりまわす感じ whileでやるようなやり方 $array = array(1, 2, 3, 4, 5); for ($i = 2; $i < count($array); $i++) { echo $array[$i]; } $count = 0; foreach ($array as $value) { $count++; if ($count > 2) { echo $value; } }
176 名前:nobodyさん mailto:sage [2009/04/10(金) 11:11:03 ID:???] foreach自体に途中から始める機能はないけど foreach (array_slice($array, N) as $value) こうやるのが普通?かな
177 名前:nobodyさん mailto:sage [2009/04/10(金) 11:11:14 ID:???] >>175 マジレスするとforeachの中でifで判定する手法は古いとだけ記述しておこう
178 名前:173 [2009/04/10(金) 11:20:09 ID:BYyPBH+i] >>174 すみません。 知識不足で「seekしてiterator」というのがわかりません; >>175 なるほど・・・ こうしてみると、たしかに後者は無駄が多いですね。 >>176 array_sliceで途中から取り出すというのは思いつきませんでした! これは使えそうですね!
179 名前:nobodyさん mailto:sage [2009/04/10(金) 11:32:44 ID:???] >>176 プチマジレスするとforeachの中でarray_sliceすると回すたびに関数が実行されるから 一度別の配列に入れるのがいい
180 名前:nobodyさん mailto:sage [2009/04/10(金) 11:41:47 ID:???] マジレスするとforでやりなYO
181 名前:nobodyさん mailto:sage [2009/04/10(金) 11:44:44 ID:???] >>179 以下のようにするとhogeが一度しか表示されないのはループの度にarray_sliceは実行されてfooは最初の一度だけってこと? function foo() { echo "hoge<br>\n"; return array(1, 3, 5, 7, 9); } foreach (array_slice(foo(), 2) as $value) echo $value,"<br>\n";
182 名前:nobodyさん mailto:sage [2009/04/10(金) 11:50:13 ID:???] >>178 $ai = new ArrayIterator(array(1, 3, 5, 7, 9)); $ai->seek(2); while ($ai->valid()) { echo $ai->current(); $ai->next(); }
183 名前:nobodyさん mailto:sage [2009/04/10(金) 11:53:22 ID:???] >>175 forの中にcount入れるとかナイワ
184 名前:nobodyさん [2009/04/10(金) 11:55:38 ID:FoG5RXFZ] プロキシでHPにアクセスする人います 80番ポートでアクセスしたとか8080番ポートでアクセスしたとか何番ポートを使ってアクセスしたかを調べたいのですが どのような関数を使うのでしょうか?
185 名前:nobodyさん mailto:sage [2009/04/10(金) 12:00:51 ID:???] >>183 よく嫁foreachだろ forはiで現在位置がわかるが foreachはわからないからな
186 名前:nobodyさん [2009/04/10(金) 12:00:54 ID:/dNSLV40] ttp://www.phppro.jp/phpmanual/php/filters.string.html 文字列フィルタについて質問です 上記ページと公式サイトには例が4つまで載ってるのですが これはあくまでも一例で他にもあるのでしょうか? もしよろしければ掲載されてないコードをご教示お願い致します
187 名前:nobodyさん mailto:sage [2009/04/10(金) 12:01:22 ID:???] >>179 こうやってもhogeは一度だけ表示されるけどもしかしてarray_sliceって特別な実行のされ方? function slice2() { echo "hoge<br>\n"; return array(1,3,5); } foreach (slice2() as $value) echo $value,"<br>\n";
188 名前:186 [2009/04/10(金) 12:01:35 ID:/dNSLV40] すいませんID出し忘れました 以後、気を付けます
189 名前:nobodyさん mailto:sage [2009/04/10(金) 12:02:41 ID:???] >>185 よく読んだらこう書いてありますね for ($i = 2; $i < count($array); $i++) { echo $array[$i]; }
190 名前:nobodyさん mailto:sage [2009/04/10(金) 12:24:25 ID:???] >>175 じゃないが俺もcount使ってるわ 配列の長さ取得するのってPHPだとcountじゃないの? JavaやJavaScriptでいうlengthと一緒だよね?
191 名前:nobodyさん mailto:sage [2009/04/10(金) 12:54:09 ID:???] 自分の場合、PHPでfor文使うのは、かなり少ないな。 なんかオフセット的なパラメータが出てくるのはうざったい。 自分の作ったコードでgrepしたら foreachの 1/10 以下だった。 while は半分ぐらい。 >>190 javascriptは微妙だけどね。 いきなり配列に x[100] = 'hogehoge'; とかすると、length は 101 になるくせに、 for(in) だと登録した1つしか出てこないし。そのわりに join は 101個結合するし。
192 名前:nobodyさん mailto:sage [2009/04/10(金) 12:56:45 ID:???] 折れも、for文なら count()を使う。 でも、大抵 foreach 文で処理しちゃうけどね...
193 名前:178 [2009/04/10(金) 12:58:57 ID:BYyPBH+i] >>179 そうだったんですか! ということは、for($i = 1; $i < count($array); $i++) のように書いた場合も、毎回count()が実行されるのでしょうか? 一度 $count = count($array) のようにしたほうがいいですか? >>182 ArrayIteratorというクラスがあったんですね。 ややコードが長くなりますが、配列が直感的に操作できますね! 配列のループだけでもいろいろなやり方があって、勉強になります! 質問してみてよかったです!
194 名前:nobodyさん mailto:sage [2009/04/10(金) 13:04:28 ID:???] // テスト用変数 function testAry() {for($a=0;$a<100;$a++) $h[]=$i;return $h;} // タイム測定 function bench() {return microtime(true);} // ベンチマーク表示 function cale($time) { echo "<pre>";print_r($time);echo "</pre>"; foreach($time as $t) {echo "<p>".($t[1]-$t[0])."</p>";} } // --------- 比較コード ---------------- */ $time[0][0]=bench(); $test = array(); $cnt=count(testAry()); for($i=0; $i<$cnt; $i++) {$test[]=$i;} $time[0][1]=bench(); // ---------- 175のコード ------------- */ $time[1][0]=bench(); $test = array(); for ($i=0; $i<count(testAry()); $i++) {$test[]=$i;} $time[1][1]=bench(); /* ---------- ここまで ---------------- */ cale($time);
195 名前:nobodyさん mailto:sage [2009/04/10(金) 13:05:15 ID:???] >>192 マニュアル読め。 jp.php.net/manual/ja/control-structures.for.php >この書き方には問題があります。 このコードは実行速度が遅くなることでしょう。 配列のサイズを毎回計算しているからです。 ... >>179 の意味がイマイチ取りきれんのだけど、foreach がループ回数分だけ式を評価するってのは初耳。 ちょっとありえんと思う。
196 名前:nobodyさん mailto:sage [2009/04/10(金) 13:06:32 ID:???] >>194 の続き ベンチマーク結果 0.00026893615722656(countをforから外したコード) 0.016515970230103(>>175 と>>185 が進めるのコード)
197 名前:nobodyさん mailto:sage [2009/04/10(金) 13:07:52 ID:???] >>195 間違い >>192 じゃなくて >>193 ごめんね。
198 名前:nobodyさん mailto:sage [2009/04/10(金) 13:08:30 ID:???] >>195 うほっ。最適化されるもんだとばかりorz。