2011-07-26 23 views
1

phpのfile()関数を使ってテキストファイルから作成した配列から特定の単語を抽出しようとしています。PHPファイル内で特定の単語を検索する

テキストファイルにsample.txtは、このようなものです:

A registration has been received. 

Name: test 
Lastname: test2 
Email: [email protected] 
Company/School: Test2 
Company2: test3 
Address1: test4 
Address2: test5 
City: test6 
State: test7 
Country: test8 
Zipcode: test9 

今、私が使用しているファイル()関数は、配列の中に、このテキストファイルを配置します。

$file_name='sample.txt'; 
$file_array=file($file_name); 

次に、ループをたどって各値を抽出し、この配列から '名前'という単語を検索しました。

$data1='Name'; 

    foreach($file_array as $value){ 
    if(stripos($value,$data1)===FALSE) 
     echo "Not Found"; 
    else 
     echo "Found"; 
    } 

しかし、常に「見つかりません」と表示されます。私はstrpos、strstr、preg_matchを使ってみましたが、役に立たなかった。また、ファイルから作成するのではなく、単語の通常の配列を使用すると、正しく動作します。

ありがとうございました。

更新:この問題の私の目的は、最初にどのフィールドが元であるかを検出することです。 '名前'とその値ex。 'test'

答えて

1

それは確かに私は(ファイル正確かどうかはわかりません、あなたのファイルのエンコードに問題や課題を行末ことができる)のいずれかの空白を処理します。

コードを改善する方法の提案として、データからキー配列を作成する場合、より信頼性の高いarray_key_exists()関数を使用してフィールドを検索することができます。次のように

$file_name = 'sample.txt'; 
$file_data = file($file_name); 

// loop through each line 
foreach ($file_data as $line) { 

// from each line, create a two item array 
$line_items = explode(":", $line); 

// build an associative (keyed) array 
// stripping whitespace and using lowercase for keys 
$file_array[trim(strtolower($line_items[0]))] = trim($line_items[1]); 
} 

今、あなたはarray_key_existsを使用することができます。

if (array_key_exists("name", $file_array) === false) { 
    print "Not found."; 
} else { 
    print "Found."; 
    // and now it's simple to get that value 
    print "<br />Value of name: " . $file_array['name']; 
} 
+0

このコードを試しましたが、まだ「見つかりませんでした」と表示されます – Sugat

+0

print_r($ file_array)を使用してキーの外観を調べてみます。 – Matthew

+0

私はあなたの意見を見ます。したがって、キーは実際には "[2] => Name:test"のような数字です。だから私は名前を指定することから名前を得ることができ、この場合は "名前"ではなく "2"になります。しかし、この場合、まず配列キーを見てから値を変更しなければならないので、テキストファイルの中で "Name"の位置が変更された場合、スクリプトが壊れてしまいます。しかし、これは今のところうまくいくので、とにかくおかげさまです。 – Sugat

0

あなたの配列の各 "行"の最後に改行文字があります。このようにそれをロードしてみてください。

$file_array=file($file_name, FILE_IGNORE_NEW_LINES); 
+0

は、私はそれを試してみましたが、それは仕事をdoesntの。再度 "見つからない" – Sugat

+0

'var_dump($ file_array)'は何を表示しますか? –

+0

基本的にthis-> array(13){[0] => string(70) "ÿþA登録を受け取りました" [1] => string(1) "" [2] => string(21) "Name :test "[3] => string(33)" Lastname:test2 "..... contd。} – Sugat

関連する問題