explode の回答履歴
- 「checkText3」が処理されない
とあるHOWTO本を見ながら、独学でPHPを勉強中です。 サンプルプログラムを動作させようとマニュアル通りに記述してみたのですが、一部分だけが上手く処理されません。 付属CDに収められているphpファイル自体がこのような記述になっている為、マニュアル自体に間違いがあるのかな?と思うのですが、 どこがおかしいのか解らずにいます。 お分かりになる方がいれば、ご教授願えませんでしょうか? 上手く処理されないのは「//テキストチェック3.バイバイされたらバイバイを返す」の部分です。 よろしくお願い致します<(_ _)> <?php $res = ""; if(isset($_POST['text1']) == false) {$res = getAisatsu();} else{$text1 = $_POST['text1']; if($text1 == "") {$res = "え? なんていったの?";} else{$flag =false; //まずcheckTextであいさつ文をチェック $str = checkText($text1); if($str != false) {$flag = true; $res = $str; } //続いてcheckText2で悪口の対応 if($flag == false) {$str = checkText2($text1); if($str != false) {$flag = true; $res = $str; } } //最後にcheckText3でさよならの対応 if($flag == false) {$srt = checkText3($text1); if($str != false) {$flag = true; $res = $str; } } //すべてダメならテキストを分解してチェック if($flag == false) {$arr = bunkatsu($text1); foreach($arr as $str) {if(getWordCheck($str) == true) {$flag = true; $res = $str . "って、なぁに?"; break; } } } //それでもダメなら全文で聞き返す if($flag == false) {$res = delTouten($text1) . "って、なぁに?";} } } //時間によって異なるあいさつ文を返す function getAisatsu(){ $arr = array('……ね、眠い','おはよう!','こんにちは~','こんばんわ',); $d = getdate(); $t = $d['hours']; $t2 = (int)($t / 6); return $arr[$t2]; } //テキストチェック。あいさつ文があれば対応する挨拶を返す function checkText($s){ if($s == ""){return false;} $res = false; $data = array('こんにちは','こんにちわ','こんちは','こんちわ'); foreach($data as $str) {if (mb_strpos($s,$str) !== false) {$res = 'どうも、' . $str . '!'; break; } } return $res; } //テキストチェック2.悪口が書かれていたら文句をいう function checkText2($s) {if ($s ==""){return false;} $res = false; $data = array('バカ','馬鹿','あほ','アホ','阿呆'); foreach($data as $str) {if(mb_strpos($s,$str) !== false) {$res =$str . 'じゃないもん!'; break; } } return $res; } //テキストチェック3.バイバイされたらバイバイを返す function checkText3($s) {if ($s == ""){return false;} $res = false; $data = array('ばいばい','バイバイ','じゃあね'); foreach($data as $str) {if(mb_strpos($s,$str) !== false) {$res = 'それじゃ' . $str . '!'; break; } } return $res; } //句読点を削除する function delTouten($s) {$res = str_replace('。','',$s); $res = str_replace('?','',$res); $res = str_replace('!','',$res); $res = str_replace('.','',$s); $res = str_replace('?','',$res); $res = str_replace('!','',$res); return $res; } //テキストを句読点で分割し、配列として返す function bunkatsu($s) {mb_regex_encoding("sjis"); $res = mb_ereg_replace('[。、?!,.!?]','',$s); $arr = mb_split(' ',$res); return $arr; } //主語や接続詞が含まれているかを調べる function getWordCheck($s) {if ($s == ""){return false;} $res = $s; $data = array('私','わたし','僕','ぼく','俺','おれ','オレ'); foreach($data as $str) {if(mb_strpos($s,$str) !== false) {$res = false; break; } } return $res; } //サニタライズ function getSeftyText($s) {$res = str_replace("<","<",$s); $res = str_replace(">",">",$res); return $res; } ?>
- ベストアンサー
- PHP
- ne_ko_mama
- 回答数1
- PHPによるCSVファイルの指定列検索について
いつも参考にさせていただいております。今回はじめての質問になりますが、よろしくお願いします。 PHPによるCSVファイル内の指定列内を検索する方法について困っております。似たような質問(http://oshiete1.goo.ne.jp/qa3570985.html)を参照しましたが、どうにもわからずほとほと困っている状態です。 とりあえず他サイトを参考にして検索フォームを下記のように作成しました。(ラジオボタンの送信内容は便宜上変更しました) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> <title></title> </head> <body> <form action="search_4.php" method="POST"> <INPUT type="radio" name="touroku_type" value="りんご">りんご <INPUT type="radio" name="touroku_type" value="なし">なし <INPUT type="radio" name="touroku_type" value="ぶどう">ぶどう <INPUT type="radio" name="touroku_type" value="メロン">メロン <INPUT type="radio" name="touroku_type" value="スイカ">スイカ<BR> <input type="submit" name="submit" value="検索"> </form> <!--ここから検索結果--> <ul> <?php if($_POST["touroku_type"]!=""){ $KeyWord=$_POST["touroku_type"]; $KeyWord=htmlspecialchars($KeyWord); $Data=file("system.csv"); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); if(mb_eregi($KeyWord,$lines)){ $line=explode(",",$Data[$i]); ?> <li><?=$line[3]?> → <a href="item.php?id=<?=$line[0]?>">詳細を見る</a></li> <?php } } } ?> </ul> </body> </html> CSVファイルの登録情報は 1,りんご,あり 2,なし,あり 3,ぶどう,なし 4,メロン,なし 5,スイカ,なし とします。 この場合、”りんご”や”スイカ”など他で入力されていない情報で検索した場合きちんと出ますが、”なし”で検索すると2から5の情報が出てしまい検索として役に立たない状態です。 ここで質問なのですが、PHP上で指定列のみを検索する場合(上記の場合、配列の2つ目のみを検索対象とする)、上記プログラムのどこを変更すべきなのかご教授いただけますでしょうか? よろしくお願いします。
- PHPの正規表現で一部のURLを抜き出したい
<a href="../hoge/hoge/hoge123.htm">テスト1</a><br> <a href="../hoge/hoge/hoge124.htm">テスト2</a><br> <a href="../hoge/hoge/hoge125.htm">テスト3</a><br> <a href="../hoge/hoge/hoge126.htm">テスト4</a><br> <a href="../hoge/hoge/hoge127.htm">テスト5</a><br> このような文字列があり「../hoge/hoge/hoge126.htm」だけをマッチさせたい場合はどのような正規表現を書けばよいでしょうか?回答宜しくお願いします。 *URL内の文は使わず、テスト1、テスト2・・・と<a href="、">を使ってくださいお願いします。
- foreachの表示に追加するには
http://okwave.jp/qa2460708.html と同じようなテーブル構造で、同じようなhtmlへの書き出しを行っています。 No.1さんの回答の下記のスクリプトを参考にし、うまく表示することができました。 $sql="SELECT `ID`,`SHOPNAME` FROM `SHOP`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $SHOP[$rows["ID"]]=$rows["SHOPNAME"]; } $sql="SELECT `ID`,`ITEMNAME` FROM `ITEM`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $ITEM[$rows["ID"]]=$rows["ITEMNAME"]; } foreach($SHOP as $key1=>$val1){ foreach($ITEM as $key2=>$val2){ $LINK[$key1][$key2]=" "; } } $sql="SELECT `SHOP`,`ITEM` FROM `LINK`"; $res = mysql_query($sql,$link); while ($rows = mysql_fetch_assoc($res)) { $LINK[$rows["SHOP"]][$rows["ITEM"]]="○"; } print<<<eof <table border> <thead> <tr> <th> </th> eof; foreach($ITEM as $key2=>$val2){ print "<th>$val2</th>"; } print<<<eof </tr> </thead> <tbody> eof; foreach($SHOP as $key1=>$val1){ print "<tr>"; print "<td>$val1</td>"; foreach($ITEM as $key2=>$val2){ print "<td>{$LINK[$key1][$key2]}</td>"; } print "</tr>"; } print<<<eof </tbody> </table> eof; しかし、下記のテーブルに項目が1つ追加され、それも表示できるようにして欲しいと依頼されました。 Table:SHOP ID SHOPNAME STATION ------------------------ 1 東京 | 表参道 2 大阪 | 梅田 3 福岡 | 天神 (略) 結果としては下記のように表示したいです。 NAME |STATION|化粧品|家具 |園芸 |食品 |家電 | ------------------------------------------------ 東京 | 表参道| | | | ○ | | 大阪 | 梅田 | | | | | ○ | 福岡 | 天神 | ○ | ○ | | | | (略) 配列をよく理解できていないため、スクリプトをそのまま真似して $STATION[$rows["ID"]]=$rows["STATION"]; を作ったり $SHOP[$rows["ID"]][$rows["STATION"]]=$rows["SHOPNAME"]; を作ったりして無理矢理展開してみようとしましたが やはり表がぐちゃぐちゃになってしまいます。 どうすればうまく表示できるか、アドバイス頂けませんでしょうか。
- phpメールフォームから送信・登録されたデータをcsvで保存する方法
質問があります。よろしくお願いします。 タイトルの通りにPHPのメールフォームから送信・登録されたデータを メール送信とは別に、ログ一覧のようにcsvファイルに保存したいのです。 似たような質問を探しまして、こちらの質問とほぼ同じ質問でして URL:http://okwave.jp/qa3279798.html こちらの質問主様が引用しているフォームメールは利用していたので、 URL:http://php.eweb-design.com/1301_mail.html? 回答にあるソースを同じように利用してみようと思ったのですが、 挿入場所が分からず上手く利用できません。 php4でANo.4の回答者様が明記したソース(最後に明記)を 上記のメールフォームで利用する場合はどこに挿入すればいいのでしょうか。 それともこのフォーム用に何か書き足したりしないとならないのでしょうか。 (email、nameなどの送信項目名部分は自分用に合わせて書き換えて試しました) 分かる方いましたら、ご回答のほうよろしくお願いします。 ↓↓明記してあったソース↓↓ $DATA1 = array("メールアドレス","名前","アンケート");//1行目を格納 $DATA2 = array($email,$name,$Anke_to);//2行目を格納 $WriteList = array($DATA1,$DATA2);//2次元配列にする $res_file = fopen("Sample.csv",'w+'); foreach($WriteList as $list){ for ($i =0 ;$i < 3;$i++){ if($i==2){//アンケート項目か fwrite($res_file, $list[$i]); }else{ fwrite($res_file, $list[$i].","); } } fwrite($res_file, "\r\n");//改行を挿入 } fclose($res_file);
- phpメールフォームから送信・登録されたデータをcsvで保存する方法
質問があります。よろしくお願いします。 タイトルの通りにPHPのメールフォームから送信・登録されたデータを メール送信とは別に、ログ一覧のようにcsvファイルに保存したいのです。 似たような質問を探しまして、こちらの質問とほぼ同じ質問でして URL:http://okwave.jp/qa3279798.html こちらの質問主様が引用しているフォームメールは利用していたので、 URL:http://php.eweb-design.com/1301_mail.html? 回答にあるソースを同じように利用してみようと思ったのですが、 挿入場所が分からず上手く利用できません。 php4でANo.4の回答者様が明記したソース(最後に明記)を 上記のメールフォームで利用する場合はどこに挿入すればいいのでしょうか。 それともこのフォーム用に何か書き足したりしないとならないのでしょうか。 (email、nameなどの送信項目名部分は自分用に合わせて書き換えて試しました) 分かる方いましたら、ご回答のほうよろしくお願いします。 ↓↓明記してあったソース↓↓ $DATA1 = array("メールアドレス","名前","アンケート");//1行目を格納 $DATA2 = array($email,$name,$Anke_to);//2行目を格納 $WriteList = array($DATA1,$DATA2);//2次元配列にする $res_file = fopen("Sample.csv",'w+'); foreach($WriteList as $list){ for ($i =0 ;$i < 3;$i++){ if($i==2){//アンケート項目か fwrite($res_file, $list[$i]); }else{ fwrite($res_file, $list[$i].","); } } fwrite($res_file, "\r\n");//改行を挿入 } fclose($res_file);
- phpメールフォームから送信・登録されたデータをcsvで保存する方法
質問があります。よろしくお願いします。 タイトルの通りにPHPのメールフォームから送信・登録されたデータを メール送信とは別に、ログ一覧のようにcsvファイルに保存したいのです。 似たような質問を探しまして、こちらの質問とほぼ同じ質問でして URL:http://okwave.jp/qa3279798.html こちらの質問主様が引用しているフォームメールは利用していたので、 URL:http://php.eweb-design.com/1301_mail.html? 回答にあるソースを同じように利用してみようと思ったのですが、 挿入場所が分からず上手く利用できません。 php4でANo.4の回答者様が明記したソース(最後に明記)を 上記のメールフォームで利用する場合はどこに挿入すればいいのでしょうか。 それともこのフォーム用に何か書き足したりしないとならないのでしょうか。 (email、nameなどの送信項目名部分は自分用に合わせて書き換えて試しました) 分かる方いましたら、ご回答のほうよろしくお願いします。 ↓↓明記してあったソース↓↓ $DATA1 = array("メールアドレス","名前","アンケート");//1行目を格納 $DATA2 = array($email,$name,$Anke_to);//2行目を格納 $WriteList = array($DATA1,$DATA2);//2次元配列にする $res_file = fopen("Sample.csv",'w+'); foreach($WriteList as $list){ for ($i =0 ;$i < 3;$i++){ if($i==2){//アンケート項目か fwrite($res_file, $list[$i]); }else{ fwrite($res_file, $list[$i].","); } } fwrite($res_file, "\r\n");//改行を挿入 } fclose($res_file);
- Pager::factory()の使い方がわかりません
PHP5&MySQL5&XP,pear::DB接続 Pager::factory()を使用し、1ページに1件ずつMySQLからのデータを 表示させようとしています。 下記プログラムから、DBのフィールドidとquestuionを表示させたいのですが、 うまくいきません。 ご教授いただけると幸いです。 <? session_start(); ?> //--セッション開始しログイン中の方の名前を表示させています <?php require_once 'Pager/Pager.php'; //DBに接続 include_once('connection.php'); $sql="select * from examin ORDER BY RAND() LIMIT 20"; $res = mysql_query($sql); $i=1; while($row = mysql_fetch_assoc($res)) { $data_list[] = array( "id"=>$row["id"], "question"=>$row["question"] ); } //Pagerへのデータ割り当て処理 $perPage=1; $params=array("perPage"=>$perPage, "itemData"=>$data_list); $o_page=Pager::factory($params); foreach($o_page->getPageData() as $item){ $data_list_for_page[]=$item; } //--ここから先がわかりません。 ?>
- Pager::factory()の使い方がわかりません
PHP5&MySQL5&XP,pear::DB接続 Pager::factory()を使用し、1ページに1件ずつMySQLからのデータを 表示させようとしています。 下記プログラムから、DBのフィールドidとquestuionを表示させたいのですが、 うまくいきません。 ご教授いただけると幸いです。 <? session_start(); ?> //--セッション開始しログイン中の方の名前を表示させています <?php require_once 'Pager/Pager.php'; //DBに接続 include_once('connection.php'); $sql="select * from examin ORDER BY RAND() LIMIT 20"; $res = mysql_query($sql); $i=1; while($row = mysql_fetch_assoc($res)) { $data_list[] = array( "id"=>$row["id"], "question"=>$row["question"] ); } //Pagerへのデータ割り当て処理 $perPage=1; $params=array("perPage"=>$perPage, "itemData"=>$data_list); $o_page=Pager::factory($params); foreach($o_page->getPageData() as $item){ $data_list_for_page[]=$item; } //--ここから先がわかりません。 ?>
- 多次元配列の重複削除
PHPの多次元配列の重複削除で悩んでいます・・・。 例) array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } [3]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } } 上記のような配列があった場合 下記のように重複してるものを削除させたいのです・・・。 array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } } array_unique($array)を使用してもうまく行かず 悩んでおります。。。。 よい方法等あればご教授お願いいたします。