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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2008/03/16(日) 17:23:27ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 65
http://pc11.2ch.net/test/read.cgi/php/1203854597/

◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。

◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくは質問時のトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0910nobodyさん2008/04/09(水) 23:45:32ID:???
ディレクトリ内のファイル数の合計を取得したいんですがどう書けばいいでしょうか?
0911nobodyさん2008/04/09(水) 23:57:05ID:???
count(scandir($path));
0912nobodyさん2008/04/10(木) 01:19:01ID:???
>>905
ってか、プロバイダーまでグルかよww

昔、ベッコウアメインターネットっていう会社があってけど、
警察から捜査要請があっても断っていた。

プロバイダー責任法とかで、警察に弱みを握られているんだろうな。
0913nobodyさん2008/04/10(木) 01:34:37ID:???
scandirなんてあったのか、ずっとopendirとreaddir使ってたわ
0914nobodyさん2008/04/10(木) 01:46:15ID:???
>>909
よう今日の俺。

自分が先にブチ込んだとは言え、
妊娠させるっていう本能的な目的を達成できなかったっていう
負け組感が心のどこかで微かに沸く気がする。

つーかどこの誤爆なんだww
0915nobodyさん2008/04/10(木) 01:46:39ID:???
>>912
物凄く何をいまさらって感じ
0916nobodyさん2008/04/10(木) 02:37:53ID:rhHoOlQn
PHPでファイルのある行に追記するという処理をしたいのですけど、
その辺りの処理はどのように書けばいいでしょうか?
0917nobodyさん2008/04/10(木) 02:45:58ID:???
>>916
何がわからないのか書けよ

全部わからないなら小学校からやりなおせ
0918nobodyさん2008/04/10(木) 02:56:42ID:???
ファイルのある行に追記するという処理が分からないんです。
日本語読めますか?
09199162008/04/10(木) 02:58:51ID:rhHoOlQn
>>917
アルゴリズム的なところが分からないのですけど。
ファイルを開いて、そのファイルの所定の位置に文字列を挿入する
という処理がしたいと思っています。
簡単に、どのようなソースを書けば、そのようなことが出来るでしょうか?
0920nobodyさん2008/04/10(木) 03:09:24ID:???
>>919
マニュアルは読みましたか?
09219162008/04/10(木) 03:23:23ID:rhHoOlQn
読みましたが、買った本の内容がいまいちでして、
fgetsで一度ファイルの内容をすべて変数に格納してから
書き出すということを考えたのですが、
もうちょっと簡単に処理する方法はないでしょうか?
0922nobodyさん2008/04/10(木) 03:27:55ID:???
それはマニュアルではありません
09239162008/04/10(木) 03:37:04ID:rhHoOlQn
>>922
すみません。
マニュアルは見てますが、
私がやりたい項目が見つかりません。
0924nobodyさん2008/04/10(木) 03:52:52ID:???
>>921
「ない」
0925nobodyさん2008/04/10(木) 04:01:12ID:???
質問が漠然としすぎてて答えようがねーんだわ

もうちょい具体的に書いてくれ
0926nobodyさん2008/04/10(木) 08:12:34ID:wqutz9kO
ADOdbで
$hoge = $DB->qstr($_GET['hoge'])
とすると、適切にクオートして、引用符で囲んでくれますが、
このままだと LIKE '%$hoge%'
のように使うことができないのですが・・・

どのようにすればよいのでしょうか?
よろしくお願いします。
0927nobodyさん2008/04/10(木) 08:16:32ID:???
すみません・・・自己解決しました。
クオートするまえに%を付け足せばいいだけでした・・・
よく考えずに質問してしまって申し訳ありません;;
09289272008/04/10(木) 08:17:28ID:wqutz9kO
ID表示するのを忘れてました;
スレを汚してしまって申し訳ありません;;
0929nobodyさん2008/04/10(木) 08:51:01ID:???
>>916はファイルを読み込まずに行を挿入するっていう関数があると思ってるんだろ。
答えは>>924だ。
0930nobodyさん2008/04/10(木) 08:54:53ID:???
>>916
1.対象ファイルをオープンする
2.tempファイルを作りオープンする
3.対象ファイルから1行読み込む
4.tempファイルに読み込んだ1行を書き出す
5.3-4を目的行まで繰り返す
6.対象ファイルからある行を読み出し、追加する
7.3-4を最後の行間で繰り返す
8.2つのファイルをクローズする
9.対象ファイルをリネーム
10.tempファイルを対象ファイル名にリネーム
11.リネームした対象ファイルを削除。

実際には1-11の途中で止まってしまっう事も考えて
フラグをセットしておくとか、1-11の処理が同時に
行われないようにするとかの処理が必要。
0931nobodyさん2008/04/10(木) 09:26:30ID:???
そんなことせんでも配列内で解決できるだろ
0932nobodyさん2008/04/10(木) 09:37:53ID:???
できない
0933nobodyさん2008/04/10(木) 09:41:59ID:???
工工エエエエエ(´Д`)エエエエエ工工
0934nobodyさん2008/04/10(木) 09:49:04ID:???
>>932
それはお前のレベルが低いだけだ・・・
0935nobodyさん2008/04/10(木) 10:20:23ID:???
最初から挿入したいとこに何かキーを入れといて、
全読み込み→キーを挿入したい文字列に置換→上書き
ってすれば楽。置換後の文字列にまたキーを入れておけば
次回以降も同じ処理で追記できるべ。
0936nobodyさん2008/04/10(木) 10:30:27ID:???
>最初から挿入したいとこに何かキーを入れといて、

どうやって?
0937nobodyさん2008/04/10(木) 13:44:24ID:???
fileで読み込めば配列になるだろ
0938nobodyさん2008/04/10(木) 13:50:06ID:???
ちょっと書いてみたがこんなかんじか?
もっといい書き方あるだろうけど

$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$new_array = array();
$count = 0;
for ($i = 0; $i < count($array); $i++) {
  if ($i == 3) {
    $new_array[$i] = 0;
    $count++;
  }
  $new_array[$i + $count] = $array[$i];
}
print_r($new_array);

$arrayはfileで読み込んだ配列ってことで

$array[3]に0を挿入した新しい配列を作るプログラム
この部分を関数にして引数で渡せば外部ファイル使う必要がないかな
0939nobodyさん2008/04/10(木) 14:09:04ID:???
while(!feof($IN)){$lines[] = fgets($IN);}
でOK
0940nobodyさん2008/04/10(木) 14:16:48ID:???
>>939
それ=fileみたいなもんだろ
0941nobodyさん2008/04/10(木) 14:27:18ID:???
>>938
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$newArray = array();
foreach($array as $key => $value) {
  if ($key == 3) {
    array_push($newArray,0);
  }
  array_push($newArray,$value);
}
var_dump($neArray);
0942nobodyさん2008/04/10(木) 14:38:51ID:???
お前らすごいね
0943nobodyさん2008/04/10(木) 16:17:50ID:???
制御構造の中に function を書いてるやつがいるんだけど、
これありなの?

if (なんたら){
 なんたら
} else {
 function hoge(){
  なんたら
}
 略
 $a = hoge();
 以下略
}
0944nobodyさん2008/04/10(木) 16:35:54ID:???
制御構造的にはNGだけど間違っちゃいない、
ビギナーがやりそうだな
0945nobodyさん2008/04/10(木) 17:11:08ID:???
ファイル操作がしたいんだけど

やればいいよ派
┣ファイルストリーム使うよ派
┃┣壊れるのは嫌だよ派(保守派)
┃┃┣処理がアトミックかどうかはFSに依存する(要出展)(ウィキペディア)
┃┃┗ソ連では、ファイルがお前をロックする!(アンサイクロペディア)
┃┗壊れてもいいよ派(過激派)
┃ ┗タロウくん壊れる訳がないよ派(無防備マン)
┗配列使うよ派
 ┣結果が同じならどうでもいいよ派(富豪プログラミング派)
 ┣配列の何が問題なのか分からないよ派(ゆとりプログラミング派)
 ┗問題が出てから対処するよ派(遅延プログラミング派)

しなくていいよ派
┣それは本当に必要なのか考えるべきだよ派(歴史修正主義派)
┣つかなんでこうするの?派(質問に質問で答えると0点だよ派)
┗やらずに済む方法を探すよ派
 ┣スレ違いだよ派(プログラム板派)
 ┣誰かに作ってもらうよ派(Web製作板派)
 ┗やっぱりペチパーには任せられないよ派(島根県松江市板)

マニュアル読めばいいよ派
┣マニュアルは最高だよ派(原理主義派)
┣マニュアルは嘘ばかりだよ派(PHP bugs も bogus ばかりだよ派)
┣User Contributed Notes は最高だよ派(二次創作派)
┗User Contributed Notes がないよ派(三流製作会社の SEO だよ派)
0946nobodyさん2008/04/10(木) 17:16:41ID:???
>>941
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$newArray = array();
foreach($array as $value) {
if ($key == 3) $newArray[] = 0;
$newArray[] = $value;
}
var_dump($newArray);
0947nobodyさん2008/04/10(木) 17:17:09ID:???
マンドクセからDB派(環境は自分で作れ派)
を追加してくれ
09489462008/04/10(木) 17:18:13ID:???
×if ($key == 3)
○if ($value == 3)
0949nobodyさん2008/04/10(木) 17:51:20ID:???
>>944
NGでもなんでもない。
>>943では関数定義が実行時に評価されるって話だ。

if (false) { function hoge() {} }
var_dump(function_exists('hoge'));
0950nobodyさん2008/04/10(木) 18:01:45ID:???
>>946
これいいな。すごく分かりやすい。
0951nobodyさん2008/04/10(木) 18:03:06ID:???
結局マニュアル見て>>949のを試すのが一番だな
ttp://www.php.net/manual/ja/language.functions.php
0952nobodyさん2008/04/10(木) 18:07:27ID:???
>>946
修正後でも結果が変わると思うが?
916の指定行に値を追加したい
というのに対しての回答が938
その回答が941であって
やるならこうだろ

$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$newArray = array();
foreach($array as $key => $value) {
  if ($key == 3) {
    $newArray[] = 0;
  }
  $newArray[] = $value;
}
var_dump($newArray);
0953nobodyさん2008/04/10(木) 18:19:38ID:???
俺は適材適所派
0954nobodyさん2008/04/10(木) 18:38:42ID:F/t4zGMj
>>945
読みにくい。これだからプログラムしかしてない人はだめだね
0955nobodyさん2008/04/10(木) 18:45:30ID:fx+O7o8h
>>951

動作するのは分かってるんだけど、可読性とかの意味でどうなのかと。
あと、わざわざ実行時評価にする意味がある場合があるのかな?
まあ、俺のところで使ってるやつは特に考えずにやったっぽいけど。
0956nobodyさん2008/04/10(木) 19:28:50ID:???
>>955
>可読性
そりゃ見ての通りだ。
>意味がある場合があるのかな
普通にあるだろ。デメリットも多いがな。
0957nobodyさん2008/04/10(木) 19:56:50ID:???
if(hoge()){function hoge(){while(hoge()){echo hoge();}}}
0958nobodyさん2008/04/10(木) 19:59:49ID:???
まぁあれだ、マニュアル原理主義で実際の運用効率とか
考えないキモメンが考えそうなコードだなw
0959nobodyさん2008/04/10(木) 20:01:57ID:???
>>943
こんなあいまいな質問の仕方なら
この展開もおかしく無いだろ

・言語構造として可能なのか
・実運用としてありなのか
ちゃんとした答えが必要なら、ちゃんとした質問を用意するって基本だろ
0960nobodyさん2008/04/10(木) 20:13:40ID:???
それも違うな。

細かい技術的なことを気にするよりも、市場調査をしっかりして、
きちんとしたコンセプトを考える方が大事。
企画書なのに5ページも10ページも書いてくる奴は馬鹿。
0961nobodyさん2008/04/10(木) 20:25:01ID:???
>>960 えーっと・・・・きみは・・・・バカ?
0962nobodyさん2008/04/10(木) 20:40:55ID:???
今なら言える
「fscanfがおかしいです。」
0963nobodyさん2008/04/10(木) 21:25:17ID:???
>>958
うちにも居るよ、
スパゲティコードしか書けないくせにプライドだけは
一人前のキモイ香具師、指摘すると青筋たててマニュアルを
持ち出すのなww
0964nobodyさん2008/04/10(木) 21:31:49ID:???
phpinfo.phpをエイプリルフールに実行したことある人
09658042008/04/10(木) 22:11:12ID:???
なんか呼ばれた気がするが気のせいにしておこうっと
0966nobodyさん2008/04/10(木) 22:42:47ID:???
知識人気取りのバカが多いな
0967nobodyさん2008/04/11(金) 03:48:55ID:iBavl2hj
>>943
if (なんたら){
 function hoge(){
  なんたら1
}
} else {
 function hoge(){
  なんたら 2
}
}

$a = hoge();
ってのなら昔やったことあるが
0968nobodyさん2008/04/11(金) 04:29:31ID:???
初めて見たぞこんなの。すげぇな。
0969nobodyさん2008/04/11(金) 06:26:31ID:???
新スレ準備しようと思うんだけど、正しいテンプレは何時の奴なの?
0970nobodyさん2008/04/11(金) 06:29:54ID:???
今は正しいのが無い
トリップもOKにしようぜ派と
IDしかダメ派で
争ってるとこだろ
IDしかダメ派の理由が曖昧すぎるけどな
0971nobodyさん2008/04/11(金) 06:41:48ID:???
そして新スレへ
【PHP】下らねぇ質問はここに書き込みやがれ 67
http://pc11.2ch.net/test/read.cgi/php/1207863515/
0972nobodyさん2008/04/11(金) 06:46:53ID:???
乙
0973nobodyさん2008/04/11(金) 07:24:05ID:???
> PHP bugs も bogus ばかりだよ派

これは泣ける
俺がmb_decode_numericentityで文字列最後に"&&&"とか"&&&&&"とか&が奇数続くと
一個&が減らされるってバグも通じなかったのか無視されてる
これがもし開発者の目にとまったら無念を晴らしてくれ
0974nobodyさん2008/04/11(金) 09:40:17ID:???
誰かネタ投下キボンヌ
0975nobodyさん2008/04/11(金) 10:52:45ID:Krf8JFLU
PHPにて、Image_Graphを使っています。
円グラフのマーカーの表示位置を基本は円グラフの中で、
表示出来ない場合(枠に文字列が重なるとかの理由で)は円グラフの外に表示し、
外に出た場合も文字列が重ならない(5%とかの小さいやつとか同士とかで)ようにする方法はあるのでしょうか?

Image_Graph_Marker_Pointing_Angularとかを調べてみたのですがそれっぽいのが見当たりませんでした。
わかるかたがおられたらお願いです、教えてください。
PHP Version:4.3.9
0976nobodyさん2008/04/11(金) 11:33:10ID:Voj+sZUV
http://thewolf.sakura.ne.jp/i/tool/view.php
これみたいに、ソースを表示させるためにはどうすればいいですか?
0977nobodyさん2008/04/11(金) 11:40:07ID:???
悪魔でも故人の乾燥です。
0978nobodyさん2008/04/11(金) 11:52:09ID:???
>>976
ソースを取得して、エスケープして、表示する
0979nobodyさん2008/04/11(金) 12:45:21ID:Voj+sZUV
一旦エスケープするのか!ありがとうごじゃます
0980nobodyさん2008/04/11(金) 12:51:48ID:???
>>975
文字サイズから高さと幅を計算して、
重なるかどうかをチェックするしかないんじゃない?
重なった分だけずらせば重ならなくなる。
0981nobodyさん2008/04/11(金) 12:57:17ID:+Zr/2VQa
多次元配列のソートについてです。

array_multisort()だと機械的にソートされてしまうのですが
自然順に任意のkeyを対象に
ソートをかけるにはどうすればよいのでしょうか?
0982nobodyさん2008/04/11(金) 13:14:07ID:???
usortかなにかに、
自然順の比較関数を使った関数を自分で書いてソート。

いかにもマニュアルのNotesにありそうなネタだけど...
と思って見たらやっぱりあった。
0983nobodyさん2008/04/11(金) 13:18:31ID:+Zr/2VQa
function fCmp($a, $b){
return strnatcasecmp($a[ "キー" ] ,$b[ "キー" ]);
}
uasort($array, "fCmp");
こんなカンジでしょうか?
キーの部分は、uasort行から渡せないですよね?
09849752008/04/11(金) 13:32:45ID:Krf8JFLU
>>980
やっぱしそこに行き着きますか・・・。
気づいてないだけで本当はあったってのを期待してたのですが・・・。

出来そうか試してみます。
0985nobodyさん2008/04/11(金) 14:25:11ID:???
>>984
一応、こんなん見つけたけど、
ttp://pear.veggerby.dk/forum/comments.php?DiscussionID=680
でもAxisにはバグがあるってのも見つけたから、いまいち自信ない。
0986nobodyさん2008/04/11(金) 14:55:30ID:???
>>983
何次元配列で、どこのキーを基準に、どうソートしたいのか分からん。
全体をまとめてソート?それとも多次元配列の構造を維持したいのか?
uksortでキーソートできるべ。
0987nobodyさん2008/04/11(金) 15:04:56ID:+Zr/2VQa
$array[] = array( "英語の名前" => "AAA", "時刻" => "1900....." "他" => "Active")
$array[] = array( "英語の名前" => "AaV", "時刻" => "1900.....")
$array[] = array( "英語の名前" => "aab", "時刻" => "1900.....")
二次元配列で 二次元目のキーを 英語でー 時刻でー 他でー と渡したいのです。
09889752008/04/11(金) 15:06:18ID:Krf8JFLU
>>985
一度、内容をよく見てみます。

もうひとつ質問があるのですが、
円グラフのマーカーに、"XX.X%"と表示は出来るのですが、
"項目名\nXX.X%"と表示することは可能なのでしょうか?

何度も質問してすみません。
0989nobodyさん2008/04/11(金) 15:16:53ID:+Zr/2VQa
すいません、分かりやすく書きます。
return strnatcasecmp($a[ "キー" ] ,$b[ "キー" ]);
のところでは
0990nobodyさん2008/04/11(金) 15:24:24ID:+Zr/2VQa
渡された二つの配列において
"キー"の時の値を比べているんですよね?
このキーの部分を任意の値に変えるにはどのような書き方をすればいいのでしょうか?
0991nobodyさん2008/04/11(金) 16:09:20ID:???
>>990
こういうこと?

function Camp($a, $b){
global $array;
return strnatcmp($array[$a]['name'], $array[$b]['name']);
}
uksort($array, "Camp");

'name'の所を任意のキーに変えて使ってみれ。
0992nobodyさん2008/04/11(金) 17:10:31ID:???
肉食いたい
0993nobodyさん2008/04/11(金) 17:20:59ID:+Zr/2VQa
>>991
ありがとうございます。
nameの所を任意のキーで使いまわし出来るようにしたかったのです
class cSort
{
var $key;
var $dsec;
function cSort(){
$this->key = "";
$this->desc = "1";
}
function fCmp($a, $b){
$cmp = strnatcasecmp( $a[ $this->key ] ,$b[ $this->key ] );
return $cmp * $this->desc;
}
function fUasort($array){
uasort($array, array( $this, "fCmp") );
return $array;
}
} こんな風にしてみました
0994nobodyさん2008/04/11(金) 17:25:17ID:+Zr/2VQa
$cArray = new cSort();
$cArray->key = "キー名";
$cArray->desc = "-1"; //降順昇順
$ary_result = $cArray->fUasort($ary_list);
ただstrnatcasecmpだと英語は自然になるのですが
2バイト文字が先に来て、その後英数字の自然順になるのですね
記号→ひらがな→漢字→数字→自然順英語
半角を先頭に回したいのですが、今度はコレの問題が・・・・
0995nobodyさん2008/04/11(金) 18:14:16ID:???
>>994
それは比較関数を書くしかない。
マルチバイトに文字を切り出して、
文字コードの範囲で場合分けして比較ってことになるかな。

ttp://www.unicode.org/Public/UNIDATA/Scripts.txt
ttp://www.unicode.org/charts/
一応、unicodeの場合の参考URLってことで


多分、労力の割りに報われない仕事だと思うが。
0996nobodyさん2008/04/11(金) 18:47:23ID:+Zr/2VQa
>>995
ありがとございます
$cmp = strnatcasecmp( $a[ $this->key ] ,$b[ $this->key ] );
$att_a = "0";  $att_b = "0";
if( strlen( $a[ $this->key ] ) != mb_strlen( $a[ $this->key ], "UTF-8" ) ) $att_a = "1";
if( strlen( $b[ $this->key ] ) != mb_strlen( $b[ $this->key ], "UTF-8" ) ) $att_b = "1";

if( $att_a == 1 && $att_b == 0) $cmp = 1;
if( $att_a == 0 && $att_b == 1) $cmp = -1;

return $cmp * $this->desc;
単純に比較結果をひっくり返してみて、とりあえず全角が後ろにソートされたのですが
前頭に英語郡が合っても、途中に記号や全角文字が入ると
後方の全角グループに行ってしまいました。例: ABC株式会社
あくまで人間がやるような自然順を模倣しようとしているだけで
機械的やるには難しいようですね。。。。
0997nobodyさん2008/04/11(金) 19:50:31ID:???
機械的やる難しいアルヨ
0998nobodyさん2008/04/11(金) 20:51:52ID:???
fscanfがおかしいです。
0999nobodyさん2008/04/11(金) 22:01:47ID:???
↓こいつは明日死ぬ
1000nobodyさん2008/04/11(金) 22:14:29ID:???
おっけー!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。