【PHP】ID出さなくても質問OKなスレ【初心者歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/09/15(月) 18:41:32ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
0514nobodyさん
2008/12/17(水) 19:25:55ID:???<table width="367" border="1">
<tr>
<td width="84">'htmlspecialchars'($post['content'])</td>
<td width="267">htmlspecialchars($post['name'])</td>
</tr>
</table>
eof;
エラーが出ます 助けてください><
0515nobodyさん
2008/12/17(水) 19:39:45ID:???配列を使うときの誤用
0516nobodyさん
2008/12/18(木) 12:27:03ID:???ヒアドキュメント内では関数は使用できない
ヒアドキュメント内で変数を使う場合{}で囲む癖をつける{$post['content']}
グローバル変数の$_POSTとどうも勘違いしてるような気がするが
$postという変数を用意してるならそっちでhtmlspecialcharsをやる
$post['content'] = htmlspecialchars($_POST['content']);
0518nobodyさん
2008/12/18(木) 13:36:48ID:???もっと一発で格好良く書く方法はありませんでしょうか?
$correct_count = 0;
foreach ($results as $result) {
if ($result->is_correct) { $correct_count++; }
}
$results は、stdClassでis_correct(boolean)をプロパティに持つ Array です。
0519nobodyさん
2008/12/18(木) 13:37:45ID:???$count = 0;
foreach ($flags as $flag) {
if ($flag) { $count++; }
}
0520nobodyさん
2008/12/18(木) 13:41:16ID:???0521nobodyさん
2008/12/18(木) 13:58:30ID:???すいません。こんな感じです。(例です)
$flags = array(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
$count = 0;
foreach ($flags as $flag) {
if ($flag) { $count++; }
}
RubyのEnumerable#countみたいにさっくりいける関数がないかと思っていたのです。
flags.count {|x| x }
また、
$count = array_count_values($flags)[TRUE];
でいけるかと思ったのですが、array_count_valuesは
stringとinteger以外(上記のbooleanとか)だと例外が発生するみたいで使えないっぽいですね。
0522nobodyさん
2008/12/18(木) 14:06:09ID:???0523nobodyさん
2008/12/18(木) 16:28:40ID:???0524521
2008/12/19(金) 18:09:01ID:???phpは向かないのに、ゴルフしようとするクセがあってスマソ
短くしたかっただけなのです。
0525nobodyさん
2008/12/19(金) 18:19:12ID:???0526nobodyさん
2008/12/20(土) 08:02:14ID:???$flags = array(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE);
echo count(array_keys($flags, false, true));
0528nobodyさん
2008/12/20(土) 14:58:54ID:???そんくらいいいってことよ
0529nobodyさん
2008/12/20(土) 15:02:39ID:???それに、booleanしか格納しないなら配列はお勧めしない。
0530nobodyさん
2008/12/20(土) 15:12:01ID:???0531nobodyさん
2008/12/20(土) 15:40:52ID:???0532529
2008/12/20(土) 15:47:42ID:???サーセン
0533nobodyさん
2008/12/20(土) 15:55:21ID:???0534nobodyさん
2008/12/20(土) 16:17:53ID:???何が知りたいのかわからん
0535nobodyさん
2008/12/20(土) 16:20:44ID:???0536nobodyさん
2008/12/20(土) 16:22:20ID:???0537nobodyさん
2008/12/20(土) 16:41:51ID:???元もわからないから説明できないんでしょ
0538nobodyさん
2008/12/20(土) 16:46:09ID:???0539nobodyさん
2008/12/20(土) 16:48:10ID:???0540nobodyさん
2008/12/20(土) 16:49:19ID:???0541nobodyさん
2008/12/20(土) 16:52:44ID:???0542nobodyさん
2008/12/20(土) 16:54:56ID:???0543nobodyさん
2008/12/20(土) 17:01:43ID:???特にIDスレに発生したスパム質問には呆れる。
そのうちここにも来るかもなw
0544nobodyさん
2008/12/20(土) 18:03:48ID:???説明できるならどこそこ言わなくても言えるわけだから
0545nobodyさん
2008/12/20(土) 20:56:19ID:???その面白さに免じて釣られたるわ。
冗長だからお勧めはしない。 => 配列を再育成する分オーバーヘッド
素直にループで数えた方が速い。 => ステップ数から速いのは自明
それに、booleanしか格納しないなら配列はお勧めしない。
=>用途によるが固定長ならビット演算、複雑ならオブジェクト内でロジックを実装(たとえばFilterIterator)
0548nobodyさん
2008/12/20(土) 23:49:04ID:???0549nobodyさん
2008/12/21(日) 00:17:37ID:???nbへのサービスだよ
0550nobodyさん
2008/12/21(日) 16:55:41ID:???これを一気に検索することは可能ですか?
10枚をまとめて1枚にすればいいんですよね
でも重くなりそう・・・
0551nobodyさん
2008/12/21(日) 17:01:00ID:???それがイヤなら最適化するなり工夫しろ
0552nobodyさん
2008/12/21(日) 17:09:10ID:???ありがとうです
0553521
2008/12/21(日) 23:33:23ID:???>>545
> 冗長だからお勧めはしない。
> 素直にループで数えた方が速い。
いや、速くなくても コードが冗長じゃなければおkでした
> booleanしか格納しないなら
元のコードは >>518 なんで・・・
というかゴルフしたかっただけです(´・ω・`)
0555nobodyさん
2008/12/22(月) 07:48:41ID:???$resultsは$resultの集合でしょ。$resultがオブジェクトだよな?
設計に問題がなければArrayObjectを使うなり、オブジェクト側で
implements countable してcount()を実装すれば、
利用側はcount($results)でok
0556nobodyさん
2008/12/22(月) 09:08:51ID:???0557nobodyさん
2008/12/22(月) 13:09:41ID:???0558521
2008/12/22(月) 13:29:24ID:???構造体っぽくみせたいときに
stdClassつかうもんだと思ってたんですが、そういうわけでもない?
0559nobodyさん
2008/12/22(月) 13:29:53ID:???0560521
2008/12/22(月) 13:44:12ID:???countになるかはわからんけど・・・
多分、2回以上カウントする必要がある時は、冗長性はさけて
関数化→クラス化→メソッド化
ってなると思います。
クラスのプロパティが簡単に設定できれば
お気軽にクラス化できるんだけど・・・
0561nobodyさん
2008/12/22(月) 13:49:46ID:???stdClassの使い方として、それはいいと思うけど、
実際に何がやりたいのかがわからんと、それ以上は云々できんわな。
stdClass使うのに、$resultsを配列にしちゃう理由が思い浮かばん。
0562521
2008/12/22(月) 13:56:07ID:???stdClassみたいに使うには、
public $hoeg = 1234;
クラス内でみたいにpublicにするだけでいいんですね。勉強不足でした。
>>561
> 実際に何がやりたいのかがわからんと、それ以上は云々できんわな。
ああ、いや、まあ実際そうですね。
最近、CodeIgniterをいじっているんですが ActiveRecordがクエリーを返す時に、
stdClassのArrayで返してくるものですから、
適当な構造の配列を関数から返す時とか、
そういう風につかっていいもんだと思って使ってました。
0563nobodyさん
2008/12/22(月) 14:07:03ID:???0564nobodyさん
2008/12/22(月) 14:11:42ID:???0565nobodyさん
2008/12/22(月) 14:29:48ID:???あとから、自前でメソッドを追加したときに、他の部分を変更しなくて済む、とか。
0566nobodyさん
2008/12/22(月) 16:44:43ID:???DBからの戻り値を使いたい状況に合わせてクラス指定して取得するとかで、
拡張性を担保する。特に指定がないときはstdClass
0567nobodyさん
2008/12/22(月) 17:50:23ID:???0568nobodyさん
2008/12/22(月) 17:56:59ID:???> 拡張性を担保する。
めくらなの?
0569nobodyさん
2008/12/22(月) 18:14:51ID:???> いやだからそのクラス指定して取得するメリットは?
> 拡張性を担保する。
めくらなの?
0573nobodyさん
2008/12/22(月) 19:42:16ID:???たとえば、
class rowFilter {
public function __set($name, $val) {
$this->{$name} = someFilter($val);
}
}
のようなクラスを用意して、自動フィルタを使い分けるとか。
複数カラムの値を自動計算させて仮想の別カラムを作ったりとか。
0574nobodyさん
2008/12/22(月) 19:57:25ID:???0575nobodyさん
2008/12/22(月) 19:58:03ID:???0576nobodyさん
2008/12/22(月) 19:58:47ID:???0577nobodyさん
2008/12/22(月) 19:59:21ID:???0579nobodyさん
2008/12/22(月) 20:32:28ID:???0580nobodyさん
2008/12/22(月) 20:33:10ID:???>>573の方法を設計に生かしたいと思うかどうか。
生かしたいと思わない者にとってはメリットはない。
0581nobodyさん
2008/12/22(月) 20:48:51ID:???ループしてnewすりゃいいじゃんって奴には(ry
0584nobodyさん
2008/12/22(月) 21:12:15ID:???なんか、このところの定番?この流れ
0585nobodyさん
2008/12/22(月) 21:13:02ID:???0587nobodyさん
2008/12/22(月) 21:18:40ID:???利点を説明もできず、必死に言い訳を取り繕っている様はこんな感じ
ヽ人人人人人人人人人人人人人人人人人人人人人人人人人人人
/ ̄(S)~\ < >
/ / ∧ ∧\ \< そんな君にはメリットはない! そんな君にはメリットはない! >
\ \( ゚Д,゚ ) / /< >
\⌒ ⌒ / ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´
)_人_ ノ
/ /
∧_∧ ■□ ( ))
( ; )■□  ̄ ̄ヽ
γ⌒ ⌒ヽ  ̄ ̄ノ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
0588nobodyさん
2008/12/22(月) 21:23:23ID:???0589nobodyさん
2008/12/22(月) 21:25:24ID:???どんだけオッサンなんだよ。お互いに。
0590nobodyさん
2008/12/22(月) 21:28:54ID:???> 利点を説明もできず
0591nobodyさん
2008/12/22(月) 21:30:16ID:???0592nobodyさん
2008/12/22(月) 21:31:03ID:???0593nobodyさん
2008/12/22(月) 21:33:43ID:???0594nobodyさん
2008/12/22(月) 21:35:37ID:???0595nobodyさん
2008/12/22(月) 21:41:08ID:???0596nobodyさん
2008/12/22(月) 21:51:45ID:???割り当てるコードを書くよりも、実装のみ書いてfetchObjectに投げればモデルを
取得できるというメリットは、
スピーディーにORMを書きたい人にとってはメリットはあるが、
そうでない人には、意味がないってだけ。
「君にはメリットはない」て言葉、そんなにひっかかるか?>>587
バカにされたとでも思ったんなら誤解だよ
0597nobodyさん
2008/12/22(月) 22:01:34ID:???0599nobodyさん
2008/12/22(月) 22:34:15ID:zcPu3Ss9どうも
0600nobodyさん
2008/12/23(火) 02:11:45ID:???巣に篭って出てくんなよw
0601nobodyさん
2008/12/23(火) 08:02:02ID:???0602nobodyさん
2008/12/23(火) 18:13:46ID:???ヒアドキュメントにテキストに入れたいのですが、
変数展開されてしまいます。
変数展開しないためには、$などをエスケープするしかないんでしょうか?
0603nobodyさん
2008/12/23(火) 18:15:20ID:???0604nobodyさん
2008/12/23(火) 18:15:26ID:???nowdoc構文を使う
0605nobodyさん
2008/12/23(火) 18:16:13ID:???5.2なので、エスケープするかぁ(´・ω・`)
まあ、置換するだけだから大丈夫だと思います。
ありがとうございました。
0606nobodyさん
2008/12/23(火) 18:25:49ID:???0608nobodyさん
2008/12/23(火) 22:27:45ID:???明けましておめでとうと
自動で表示したいです。
どうすればいいでしょうか?
0609nobodyさん
2008/12/23(火) 22:37:56ID:???明けましておめでとうと
自動で表示するようなスクリプトを書く。
0610nobodyさん
2008/12/23(火) 22:38:46ID:???0611nobodyさん
2008/12/24(水) 05:34:37ID:???記号であるの ”[” と ”]” をそれぞれ ”<” ”>”に置換したいんですけど、
$string="testA[ testB ]";
$patterns[0] = '/[/';
$patterns[1] = '/]/';
$replacements[0] = '<';
$replacements[1] = '>';
$replace = preg_replace($patterns, $replacements, $string);
$tag = htmlspecialchars_decode($replace);
echo '<pre>'.($tag).'</pre>';
testA<testB>とは出力されずに
Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 1 in ”ファイル”
とだけ出力されます
もっといい方法などあればよろしくお願いします
0612nobodyさん
2008/12/24(水) 05:42:42ID:???$replacements[0] = '<';→&lt
$replacements[1] = '>';→&gt
逆は出来た(イメージと違います・・・)んですが、どうしてもできません
ちなみにソースはこれです
$string=htmlspecialchars("testA<testB>");
$patterns[0] = '/&lt/';
$patterns[1] = '/&gt/';
$replacements[0] = '[';
$replacements[1] = ']';
$string2 = preg_replace($patterns, $replacements, $string);
$string3 = htmlspecialchars_decode($string2);
echo '<pre>'.($string3).'</pre>';
出力結果:testA[;testB]; セミコロンがなぜか入っています・・・
■ このスレッドは過去ログ倉庫に格納されています