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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/12/08(火) 13:53:09ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 90
http://pc11.2ch.net/test/read.cgi/php/1258187482/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
02271962009/12/13(日) 18:06:05ID:iFkYaR3P
>>226
だめです。

<?php
preg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);
print_r($match);

Array ( [0] => 2,6,18,11 [1] => 2 [2] => 11 )
0228nobodyさん2009/12/13(日) 18:17:04ID:???
preg_replace() 使えよ
0229nobodyさん2009/12/13(日) 18:20:12ID:???
>>277
君も頑固だねpreg_matchじゃダメっていってるのに


preg_match_all('/(>*?-?\d+)/', '2,6,18,11', $match);
print_r($match);
0230nobodyさん2009/12/13(日) 18:22:07ID:???
ここは正規表現のスレではありません。
移動してください。

正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/

正規表現 Part6(@ム板)
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
02311962009/12/13(日) 18:36:47ID:iFkYaR3P
>>229
できました。ありがとうございます。
ほかの方も、正解はありませんでしたがありがとうございました。

ただ、なぜだめなのかいまいちよくわかりません。
私は限界ですが、がんばればうまくいきそうな気がします。
02321962009/12/13(日) 18:41:44ID:iFkYaR3P
>>229
試したら、,2>4みたいな変なものにもマッチしますね。
あくまでもバリデーションなので、
>>2,4などにはマッチしてほしいですが、不正なものははじきたいです。
0233nobodyさん2009/12/13(日) 18:45:59ID:???
何でもかんでも聞かないで少しは自分で改良する努力しろよ

preg_match_all('/>*?(\d*\-?\d+)/', '2>4,>>6-9,18,11', $match);
print_r($match);
02341962009/12/13(日) 19:07:59ID:iFkYaR3P
>>233
改良し、限界と感じたのでお助けを請うているのです。

バリデーションの意味を勘違いされていると思いますが、2>4は弾くべきなのです。
私が求めているものは、>>2,3,4などのあくまでベーシックなレスのみで、ほかには必要ありません。
0235nobodyさん2009/12/13(日) 19:30:27ID:???
>>234
改良されちゃいましたか
もうあなたはこのスレのレベルを超えているように感じられます
申し訳ございませんが、他を当たって頂けますでしょうか?

こちらもよりご満足頂ける回答ができるよう日々精進して参りたいと思っております
0236nobodyさん2009/12/13(日) 19:50:24ID:???
>>196
レスにマッチするものとか書いてるくせに
preg_match(/(\d+)(?:,(\d+))$/, $body, $match)
のどこがするのか聞きたい
何で>が入ってないの?適当に書いとけば誰かがやってくれるとおもってるんでしょ
0237nobodyさん2009/12/13(日) 19:54:50ID:???
preg_match_all('/>+(\d+\-?\d*)/', '2>4,>>6-9,18,11', $match);
0238nobodyさん2009/12/13(日) 20:06:34ID:???
>>196はお金出して、言う事聞くやつを探す方がいよさげ。
0239nobodyさん2009/12/13(日) 20:15:23ID:???
>>238
侮辱してるんですか?
市ねよキチガイ
02401962009/12/13(日) 20:21:24ID:iFkYaR3P
>>236
>適当に書いとけば誰かがやってくれるとおもってるんでしょ
私が真剣にやったものを適当と判断されるのは勝手ですが、
誰かの助けを借りるスレではないんですか?

ちょっと修正しましたが、やっぱり1と2しか出てきません。
preg_match('/(\d+)(?:,(\d+))+/', '>>1,3,10,2', $match);
0241nobodyさん2009/12/13(日) 20:25:41ID:???
もどっちゃったw
0242nobodyさん2009/12/13(日) 20:26:09ID:???
>>240

>>237
0243nobodyさん2009/12/13(日) 20:27:16ID:???
>>240
ちった学習しろ
>>229
0244nobodyさん2009/12/13(日) 20:27:15ID:???
真剣にやってるなら頂いたアドバイスを元に丸一日は考えてからここで聞くべきですね
あなたは他力本願なんですよ
0245nobodyさん2009/12/13(日) 20:29:05ID:???
まるで秀丸のeigodoo1みたいなやつだな
0246nobodyさん2009/12/13(日) 20:31:13ID:???
OK そこまで

OKwaveだ
02471962009/12/13(日) 20:31:58ID:iFkYaR3P
>>243
あなたも学習してください。
>>229では2>4みたいな意味不明なレスにもマッチします。
私のは下らない質問ですが、下らない回答はいいです。
0248nobodyさん2009/12/13(日) 20:32:03ID:???
yahoo知恵袋でもこういう態度でかい質問者は結構いるぜw
0249nobodyさん2009/12/13(日) 20:32:53ID:???
>>247
本質がわかってないようだな
たぶん永久に無理
0250nobodyさん2009/12/13(日) 20:33:37ID:???
>>247

>>237
0251nobodyさん2009/12/13(日) 20:36:02ID:???
>>247

229 名前:nobodyさん[sage] 投稿日:2009/12/13(日) 18:20:12 ID:???
>>277
君も頑固だねpreg_matchじゃダメっていってるのに

これ試験にでるお
0252nobodyさん2009/12/13(日) 20:36:23ID:???
>>247
下らない回答ばかりで申し訳ありませんでした
0253nobodyさん2009/12/13(日) 20:36:26ID:???
でねーよ
02541962009/12/13(日) 20:37:51ID:iFkYaR3P
>>250
見逃していました。
私が求めていたのはあくまでも2,4などの簡素なものですが、これで解決しそうです。
唯一の有効な回答をありがとうございました。
02551962009/12/13(日) 20:39:07ID:iFkYaR3P
ちなみにpreg_match()で解決できる方は上級プログラマだと判断します。
0256nobodyさん2009/12/13(日) 20:39:12ID:???
>>254
ご満足頂けたようでなによりです!
また居らしてくださいね!
0257nobodyさん2009/12/13(日) 20:41:29ID:???
なんでpreg_matchにこだわるんだろう
なにかallって言葉にコンプレックスでもありそうだなw
02582372009/12/13(日) 20:42:39ID:???
自分で言うのもなんですが
何でpreg_matchを使わないでpreg_match_allを使ったのかを勉強することをおすすめします
0259nobodyさん2009/12/13(日) 20:42:48ID:???
底辺くだ質質問者に上級認定されたかたがたおめでとうございます。
0260nobodyさん2009/12/13(日) 20:44:30ID:???
>>255
仰せの通りであります
我々もいつか上級プログラマになれるよう努力させて頂きます
02611962009/12/13(日) 20:51:19ID:iFkYaR3P
>>258
そもそも、私は複雑なレス指定を望んでいないわけですから>>を取り除くと2,4,6となりますよね?
それを2と4と6に分けるくらい、preg_match_all()でなくてもおそらくできるでしょうって訳です。

preg_match_all()の勝手なイメージとしてはたとえば
$body = <<<TEXT
>>2-4
>>4-6
>>6,9
TEXT;
のように本文中に複数現れるケースに使用することが好ましいと考えています。
単純な文字列分解ごときにallつける必要があるの勝手ことです。
0262nobodyさん2009/12/13(日) 20:53:39ID:???
>>261
そうでしたか
完全に勉強不足です。
本当にすみませんでした
0263nobodyさん2009/12/13(日) 20:59:02ID:???
そうだよね、関数は名前で機能を勝手に想像して使うものだし。
02642372009/12/13(日) 21:22:38ID:???
>>261
例えばなんですが
>>1
2
3
>>4

というように一行目に>>1で二行目はただの数字だけ・・みたいに検索対象の文字列が固定されてあればpreg_matchで可能です


ただ、>>196さんの残したレスを見る限りではそうではないように見えるのでpreg_matchは適さないんです。
>>227でpreg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);と書いてあるのに
>>247で2>4のようなパターンも登場してます

レス指定にマッチするのは「頭に必ず>がきて(>+)、その後に数字(\d+)、その後にハイフンが来るかもしれない(\-?)、ハイフンが着たら番号が来るかもしれない(\d*)」となります

02651962009/12/13(日) 21:47:42ID:iFkYaR3P
>>264
私の説明不足です。

既に、レスを抜き出す処理は完成しています。
抜き出した数値を、パラメータとして渡すのですが、そこのバリデーションでの話です。

2>4は>>229のコードでは不完全だということを表すために提示しただけです。
これにはマッチしないでねーってことです。

あくまで欲しているのは>>2,4,9などから数値を抜き出せるコードで、
>>2-5などの指定にマッチする処理は、必要としていません。


分かりやすいように質問を変えますが、
2,4,6から数値を抜き出す表現を教えていただけますか?
数値は2,4,6,8のように増えることもありますし、2,4のように2つのみの場合もあります。
この場合においてもallなのでしょうか?

0266nobodyさん2009/12/13(日) 21:51:17ID:???
>>265
低級プログラマの回答で恐縮ですが、どう考えてもallです
0267nobodyさん2009/12/13(日) 22:03:27ID:???
>>265
allになんかうらみでもあるのかな?
0268nobodyさん2009/12/13(日) 22:07:36ID:???
>>255
>>255
>>255
02692372009/12/13(日) 22:18:01ID:???
>>265
preg_matchはマッチしたら処理が終わります
>>196さんが求める処理はpreg_match_allを使って繰り返し検索を行う必要がありのでpreg_matchでは無理です

>>2,4,9という感じで文字列が現れるルール
preg_matchで/>+(\d+),(\d),(\d)/という風に検索対象の文字列に合わせて正規表現パターンを書かないといけないです

でも2,>>4,9という文字列が現れるかもしれませんね
なので/>*(\d+),>*(\d),>*(\d)/という風に正規表現パターンを改良します


ただ、これまでの正規表現パターンでは>>2,3,4,2,>>4と文字列が長くなってくると対応できません
文字列の長さに合わせて正規表現パターンも書き直さないとだめなんですよ
preg_matchは最初にマッチした時点で処理が終了するのでしょうがないんです

なのでこのように文字列の長さが決まって無くてもいいようにマッチしても処理が終了しないようなことがしたいわけです
そこでpreg_match_allがでるんです

preg_match_allを使うことで>>2,3,4の時も>>2,3,4,5,6,>>2の時も対応できます
0270nobodyさん2009/12/13(日) 22:26:04ID:???
質問するときは1レスでこういう結果にしたい主を書いていただけたら、求めてる回答がもらいやすいと思います

質問することは恥ずかしいこととは思ってないので前向きに頑張ってください



>>2,4,9
の文字列から
正規表現で2,4,9を取得したい
と求める「結果」を最初に書いていただきたかったです

0271nobodyさん2009/12/13(日) 22:35:13ID:???
そんな質問の仕方じゃあ、/>>(\d),(\d),(\d)/ これで解決する

対象文字列がどういう範囲で変わるかぐらいは書かないと
02721962009/12/13(日) 22:41:04ID:iFkYaR3P
>>269
大変分かりやすかったです。
ただ、>>265の通りそのような単純ではないレス指定は想定していませんので、無視してください


最後にこの解説だけをお願いします。
なぜ、18が欠落するのでしょうか?
<?php
preg_match('/^(\d+)(?:,(\d+))+$/', '9,18,11', $match);
print_r($match);
//Array ( [0] => 9,18,11 [1] => 9 [2] => 11 )
0273nobodyさん2009/12/13(日) 22:52:06ID:???
>>272 それが自力で解決できたら質問者だと判断します。

とかな。
0274nobodyさん2009/12/13(日) 23:12:49ID:???
>>272
そらそうだ
0275nobodyさん2009/12/13(日) 23:18:21ID:???
>>272
こちらこそ大変面白かったです
また来てくださいね
0276nobodyさん2009/12/14(月) 01:02:33ID:???
正規表現ってスレ違いじゃないのか?
0277nobodyさん2009/12/14(月) 01:07:25ID:???
>>272
^(\d+) が 先頭からだから9
(?:,(\d))$ が 最後にマッチだから  ,11 にマッチだけど、非格納グループなので入らず
(\d++) の部分の 11 がマッチにはいると。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ここで、いろいろいじって遊ぶといいよ。
0278nobodyさん2009/12/14(月) 01:25:14ID:???
>>276 Pの書き方じゃなくて正規表現の書き方がわからないならスレ違い
0279nobodyさん2009/12/14(月) 01:28:18ID:???
>>こちらこそ大変面白かったです

吹いたわksg
0280nobodyさん2009/12/14(月) 02:14:08ID:???
これは酷い…ワロス
>>196はpreg_matchを一から勉強して理解しろ
あと単純な区切りを取得したいならmb_splitでも使っておけば?頭悪そう
0281nobodyさん2009/12/14(月) 07:06:50ID:h0EDfnnM
DOM関数に関する質問です。

<div id="hoge">
<div id="fuga">fugaの内容</div>
hogeの内容
</div>

このようなドキュメントから
hogeの内容の部分だけを取り出したいのですが、

$xpath = new DOMXpath($dom);
$results = $xpath->query(//div[@id="hoge"]);

var_dump($results->item(0)->nodeValue);

とすると、fugaの内容もふくまれてしまいます。
hogeの内容の部分だけを取り出すには、どうしたらよいでしょうか?

よろしくお願いします。
0282nobodyさん2009/12/14(月) 08:20:24ID:???
>>281
hogeはfugaを内包しているのだから正しい挙動。
「ドキュメント」の構造を見直しましょう。

「ドキュメント」の構造ママ、文字列「hogeの内容」を取り出したいってなら、旬のpreg_matchで。
0283nobodyさん2009/12/14(月) 10:21:08ID:???
>>277
この解説あってるの?
0284nobodyさん2009/12/14(月) 10:35:21ID:???
>>280
おまえの方がひどいし、頭悪い。
mb_splitでどうやってバリデートすんだよ
0285nobodyさん2009/12/14(月) 10:42:14ID:???
うん
0286nobodyさん2009/12/14(月) 12:33:46ID:???
また低レベル回答者かwwwww
0287nobodyさん2009/12/14(月) 12:45:39ID:???
>>284

mb_internal_encoding( 'UTF-8');
mb_regex_encoding( 'UTF-8');

function mbStringToArray
( $string
)
{
$stop = mb_strlen( $string);
$result = array();

for( $idx = 0; $idx < $stop; $idx++)
{
$result[] = mb_substr( $string, $idx, 1);
}

return $result;
}
0288nobodyさん2009/12/14(月) 12:51:46ID:???
>>287
mb_split()だけでできてないんですけどーw
関数作ってまでやることなんですかーw
0289nobodyさん2009/12/14(月) 12:58:14ID:???
>>288
じゃあコード書いてから反論どうぞ
0290nobodyさん2009/12/14(月) 13:13:41ID:???
>>289
いや、ぼくちんはmb_split反対派なんでw
mb_splitでバリデーションと分割はできないつってるんですよーw
0291nobodyさん2009/12/14(月) 13:15:30ID:???
なんか方向がしあさっての方向に向かってきてるぞ。
0292nobodyさん2009/12/14(月) 13:17:21ID:???
PHPだもの。
0293nobodyさん2009/12/14(月) 13:18:08ID:Rd8pmwhF
Sun, 06 Dec 2009 10:21:20 +090021
これを
2009/12/6 10:21:20
に置き換える関数みたいなのはあるのでしょうか?
0294nobodyさん2009/12/14(月) 13:21:24ID:???
dateとstrtotime使えばいんじゃね。
0295nobodyさん2009/12/14(月) 13:23:49ID:???
最後の21って何だろ?
0296nobodyさん2009/12/14(月) 13:28:24ID:???
print date("Y/m/d H:i:s", strtotime(" Sun, 06 Dec 2009 10:21:20 +0900" ));
21は無視した。
0297nobodyさん2009/12/14(月) 13:46:37ID:Rd8pmwhF
ありがとうございます!!
21は間違いコピペでした・・・すいません・・・
0298nobodyさん2009/12/14(月) 14:08:28ID:???
21をナメんなよてめーら
0299nobodyさん2009/12/14(月) 14:12:44ID:???
正規表現クン専用の質問だろw
横鳥スンナ〜
0300nobodyさん2009/12/14(月) 16:35:52ID:???
>>284
うわ、バカがいる

>>287
お前ちょっとそういうのやめてくれない?
まるで俺が書いたみたいじゃないか
0301nobodyさん2009/12/14(月) 16:36:42ID:EQ57m/rj
GDを使ってGIFアニメをサムネイルさせると、
静止画になってしまいます
これはどうしたら解決するでしょうかヨロシクお願いします<m(__)m>
環境 FEDORA
PHP Version 5.2.10
gd
GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.3.7
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XPM Support enabled
XBM Support enabled
0302nobodyさん2009/12/14(月) 18:54:19ID:???
>>301
検索したのかい?
ttp://www.google.co.jp/search?q=gd+php+gif+%E3%82%A2%E3%83%8B%E3%83%A1&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
このページのトップに君が探してるものが見当たるようだけど
0303nobodyさん2009/12/14(月) 18:59:58ID:EQ57m/rj
>>302
GD Version bundled (2.0.34 compatible)なので、
GIF問題はすでに解決しているのではないでしょうか?

なので、何か設定の問題なのかと思い質問させてもらいました。
0304nobodyさん2009/12/14(月) 19:06:34ID:???
かわりにggったらそこしかみないのかい?
素晴らしい検索エンジンは惜しみなく使いましょう
ttp://idocsq.net/page/162
0305nobodyさん2009/12/14(月) 19:42:10ID:???
そこも見ましたが、それはなんの言語化分かりませんが、PHPではないんですね
0306nobodyさん2009/12/14(月) 19:59:03ID:???
そもそもGDがあにめGIFの読み込みに対応して無いような。
もちろん、animeGIFの書き出しのその関数にPHPは対応して無いし。
0307nobodyさん2009/12/14(月) 21:49:24ID:???
アニメgifにもいくつか保存形式とかがあるわけで
一応GDでアニメGIF(圧縮してない形式)のリサイズだけは出来るみたいだけど
それ以外はほとんど対応してないみたい

一応リサイズは出来るはずなんだけど
0308nobodyさん2009/12/15(火) 10:56:38ID:k1G/c/jQ
$test = "abc_1";

$testの前3文字が「abc」の時、trueにして一致しない場合はfalseにしたいと思います。
どういう関数を使えばよいのでしょうか?
strpo($test,"abc")==0
としてみたのですが、上手く行きませんでした。
0309nobodyさん2009/12/15(火) 10:58:55ID:???
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
strpo
0310nobodyさん2009/12/15(火) 10:58:56ID:???
strpos( $test ,"abc") === 0
0311nobodyさん2009/12/15(火) 11:06:39ID:k1G/c/jQ
>>310
出来ました!
=を3つにしなければいけないんですね。ありがとうございます。
0312nobodyさん2009/12/15(火) 12:58:25ID:???
おはよ★ミ
0313nobodyさん2009/12/15(火) 14:15:17ID:???
=を3つにする必要はない
0314nobodyさん2009/12/15(火) 14:32:12ID:???
>>311
>>309
0315nobodyさん2009/12/15(火) 14:44:56ID:???
2つだと0文字目でマッチしてfalse扱い
0316nobodyさん2009/12/15(火) 14:51:30ID:???
>>315
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);

// === を使用していることに注目しましょう。単純に == を使ったのでは
// 期待通りに動作しません。なぜなら 'a' が 0 番目 (最初) の文字だからです。
if ($pos === false) {
echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
echo " 見つかった位置は $pos です";
}
?>
0317nobodyさん2009/12/15(火) 15:23:32ID:oEMc2L99
リンク先のPHPコードで複数検索できるようにするには
どこを弄ればいいんでしょうか
よろしくお願いします

http://q.hatena.ne.jp/1161496002
0318nobodyさん2009/12/15(火) 15:25:14ID:???
>>317
【 スクリプト改造依頼スレ】(丸投げ) part7再々
http://pc11.2ch.net/test/read.cgi/php/1222645553/
0319nobodyさん2009/12/15(火) 16:16:22ID:HMx+PrJa
両方の配列に入っている文字列を抜き出すにはどうしたらいいですか?

array(1,2,4,5,7)
array(2,5,8,9,10)

→2,5

っていうようなことをやりたいのですが。1個ずつ確認していくしかない?
0320nobodyさん2009/12/15(火) 16:29:32ID:???
array_diffとかがあったような
0321nobodyさん2009/12/15(火) 16:32:05ID:???
array_diffは逆
調べたらarray_intersectがあった
0322nobodyさん2009/12/15(火) 16:39:07ID:HMx+PrJa
>320
>321
天才!ありがと〜
0323nobodyさん2009/12/15(火) 18:21:21ID:???
・・・
function set_node($parent,$treeNode){
global $db,$stt;
$flag=FALSE;
$rs=$db->execute($stt,$parent);
while($row=$rs->fetchRow(DB_FETCHMODE_ASSOC)){
$flag=TRUE;
$mid="m".$row['mid'];
$$mid=new HTML_TreeNode( // ← ココです
array('text'=>$row['title'],'link'=>$row['link']));
$result=set_node($row['mid'],$$mid);
if($result){
$$mid->setOption("icon","folder.gif");
$$mid->setOption("expandedIcon","folder-expanded.gif");
}
$treeNode->addItem($$mid);
・・・

質問させて下さい
上記の$$mid=new HTML_TreeNode( )のような、$$はいったいどういう事なのでしょうか?
マニュアルやgoogleで単に「$$」で検索しても出てきません
意味と、こういうものの名称を教えて下さい
0324nobodyさん2009/12/15(火) 18:29:43ID:???
$mid = "hello";
$$mid = "world";
print $hello;
0325nobodyさん2009/12/15(火) 18:31:10ID:???
検索するなら「可変変数」で見つかると思うよ
0326nobodyさん2009/12/15(火) 19:41:19ID:???
持ってる本2冊とも可変変数について触れられてない・・。
あまり使うべきじゃないとか?
0327nobodyさん2009/12/15(火) 19:46:04ID:???
可読性は悪くなるから、使わないで良いなら使わない方が良いと思うよ
■ このスレッドは過去ログ倉庫に格納されています