dポイントプレゼントキャンペーン実施中!

詳しくないので質問内容におかしな点が多々あるかと思いますが・・

サイト内検索でcsvファイルから文字列を呼び出し一致した文字列を出力するというスクリプトで
完全に一致した文字列だけ出力させたいのですが、

たとえばcsvに「AAA」「ABC」「ARZ」のデータがあり
「A」で検索しても何も出力されず、「AAA」と検索した時だけ「AAA」だけを出力したいのですが
「A」で検索すると「A」から始まる全ての文字列(↑で挙げた文字列全て)が出力されてしまって困っています。
どの部分を変えると完全に一致した文字列だけを検索できるようになるのか指摘してくださればと思います。

<?php
function funcSiteLink($str, $pass, $csvFileName){
if($str){
$keyword = mb_convert_kana($str, "s","SJIS");

$arr_keyword = preg_split('/[\s]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY);
$file = fopen($csvFileName,"r");

$i = 0;
while(!feof($file)){
$csv = fgets($file);

$str = explode(",", $csv);
$keywordPassArr[$i] = $str;
$i++;
}

$judg = 0;
foreach($arr_keyword as $val){
foreach($keywordPassArr as $kpa){
preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE);
if($matches[0][1] === 0){
echo '<p><a href="'.$pass .$kpa[1] .'">' .$kpa[0] .'</a></p>';
$judg++;
}
}
}
if($judg === 0){
echo "<p>一致しません</p>";
}
fclose($file);
}else{
echo "<p>一致しません</p>";
}
}
?>

A 回答 (2件)

PHPは専門外なので、見当違いな回答ならスルーしてくださいな。



preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE);
 ↓
preg_match("/^$val\$/", $kpa[0], $matches, PREG_OFFSET_CAPTURE);
としてみたらどうでしょうか?
    • good
    • 0
この回答へのお礼

おかげさまで出来ました。
ありがとうございます。

お礼日時:2013/06/24 16:19

>「A」で検索しても何も出力されず、「AAA」と検索した時だけ「AAA」だけを出力したい



命題が矛盾していませんか?
「A」が「AAA」に含まれないという箇所をどう判断するロジックなのか示すべきです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!