こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPの記述方法について教えて下さい。

<?php
$koukoh = file("http://xxxxx.jp/koukoh.txt");
$key = array_rand($koukoh);
$daigaku = file("http://xxxxx.jp/daigaku.txt");
$key = array_rand($daigaku);
$shakaijin = file("http://xxxxx.jp/shakaijin.txt");
$key = array_rand($shakaijin);

$data = file("http://xxxxx.jp/data.txt");

foreach ($data as $val) {

$pattern0="/^(\d+\s.+?\s)(.*?)(高卒)(@.*?)(\n|$)/";
$pattern1="/^(\d+\s.+?\s)(.*?)(大卒)(@.*?)(\n|$)/";
$pattern2="/^(\d+\s.+?\s)(.*?)(高社)(@.*?)(\n|$)/";
$pattern3="/^(\d+\s.+?\s)(.*?)(大社)(@.*?)(\n|$)/";

if(preg_match("$pattern0","$val")){
$val=("$val".'@'."$koukoh[$key]".'→');
}elseif(preg_match("$pattern1","$val")){
$val=("$val".'@'."$koukoh[$key]".'→'."$daigaku[$key]".'→');
}elseif(preg_match("$pattern2","$val")){
$val=("$val".'@'."$koukoh[$key]".'→'."$shakaijin[$key]".'→');
}elseif(preg_match("$pattern3","$val")){
$val=("$val".'@'."$koukoh[$key]".'→'."$daigaku[$key]".'→'."$shakaijin[$key]".'→');
}
}
$replacement=("$data"."$pattern");
preg_replace("$pattern","$replacement","$data");
print_r ($replacement);
?>


■出力結果
@高校名 →大学名 →会社名 →
※実際には各名称はランダムに出力されています。

■要望
〇ファイル
(1)data.txt
(2)koukoh.txt
(3)daigaku.txt
(4)shakaijin.txt

「data.txt」の中で高卒、大卒、高社、大社それぞれがある行には行末に、
高卒がある場合は「@→高校名→」という文字列を追加。
大卒がある場合は「@→高校名→大学名→」という文字列を追加。
高社がある場合は「@→高校名→会社名→」という文字列を追加。
大社がある場合は「@→高校名→大学名→会社名→」という文字列を追加。
上記に該当しない行はそのまま何も追加せずに表示する。
※data.txtは英字、数字、日本語が混在しています。
※高校名、大学名、会社名は(2)~(4)の行ごとに格納されている〇〇名を
 ランダムに選択したい。

マッチングはpreg_matchやswitchを使ってみたり、
行末追加はarray_pushなども試してみましたが、うまくいきません。
色々と試していますが、ちょっとパニックに陥っています。

どうかご教授の程、お願い申し上げます。

投稿日時 - 2010-03-14 03:24:49

QNo.5750264

すぐに回答ほしいです

質問者が選んだベストアンサー

気になったことだけで失敬。

$koukoh = file("​http://xxxxx.jp/koukoh.txt");​
$key = array_rand($koukoh);
$daigaku = file("​http://xxxxx.jp/daigaku.txt");​
$key = array_rand($daigaku);
$shakaijin = file("​http://xxxxx.jp/shakaijin.txt");​
$key = array_rand($shakaijin);

元ファイルの行数が全く同じなのが保障されていれば、ランダムなんだし良いかもしれません。そうで無い場合だと$key変数に全てを収めているので、別の配列を指定してしまい、存在しない値を見に行ってしまう場合がありませんか。

$koukoh = file("​http://xxxxx.jp/koukoh.txt");​
$koukoh_key = array_rand($koukoh);
$daigaku = file("​http://xxxxx.jp/daigaku.txt");​
$daigaku_key = array_rand($daigaku);
$shakaijin = file("​http://xxxxx.jp/shakaijin.txt");​
$shakaijin_key = array_rand($shakaijin);

などとしたほうが良いかと。

投稿日時 - 2010-03-17 10:02:50

お礼

ご回答有難うございます。

仰る通りかもしれません。
只、下記の様なエラーになってしまうので、
他のところが誤っている様な気がします。

Warning: preg_replace() [function.preg-replace]: Empty regular expression in /xxxxx.php on line 28
Array

エラーの場所は、print_r ($replacement); のところでした。

投稿日時 - 2010-03-18 23:15:51

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問