1

phpのfile()関数を使用してテキストファイルから作成された配列から特定の単語を抽出しようとしています。

テキストファイルsample.txtは次のようになります。

A registration has been received. 

Name: test
Lastname: test2 
Email: test@test.com
Company/School: Test2
Company2: test3
Address1: test4
Address2: test5
City: test6
State: test7
Country: test8
Zipcode: test9

これで、file()関数を使用して、このテキストファイルを配列に配置しました。

$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。'テスト'

4

2 に答える 2

1

それは確かに行末の問題またはファイルエンコーディングの問題である可能性があります.file()が空白をどのように処理するか正確にはわかりません.

コードを改善する方法の提案として、データからキー付き配列を自分で作成する場合は、より信頼性の高い 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'];
}
于 2011-07-26T21:34:05.600 に答える
0

ほとんどの場合、配列の各「行」の最後にまだ改行文字があります。次のように読み込んでみてください。

$file_array=file($file_name, FILE_IGNORE_NEW_LINES);
于 2011-07-26T20:57:58.740 に答える