[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 18:38 / Filesize : 76 KB / Number-of Response : 280
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】下らねぇ質問はID出して書き込みやがれ 83



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等)・フレームワークは各該当スレへ

95 名前:nobodyさん [2009/04/08(水) 12:55:37 ID:cjj/9xGO]
すみませんが、質問です。

リクエストパラメータが正の整数であるかどうかをチェックしたいのですが、
どういう方法が良いでしょうか?

is_int()は使えませんが、is_numeric()も良くなくて、結局 preg_match()を
使うしかないのでしょうか?

(参考)PHPと16人の仲間達 : is_numeric は・・・なぁ
php16.exblog.jp/4720976/


96 名前:nobodyさん mailto:sage [2009/04/08(水) 13:12:20 ID:???]
頻出すぎて萎える

97 名前:nobodyさん mailto:sage [2009/04/08(水) 13:16:37 ID:???]
>>95
試してないけどこれは?
$s = チェックする値
if($s<0)echo "負の数です";

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 がループ回数分だけ式を評価するってのは初耳。
ちょっとありえんと思う。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<76KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef