2011-07-26 95 views
1

我一直在試圖從將其從一個文本文件中使用的文件()函數在PHP創建的陣列中提取特定詞語創建在陣列中的特定字。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但無濟於事。此外,如果我使用正常的字數組而不是從文件創建,它可以正常工作。

在此先感謝。

更新:我在這個問題上的目標是首先檢測它是什麼字段。 '名字',然後它的價值前。 「測試」

回答

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] =>名稱:測試」。所以我可以從名稱中指定一個數字,在這種情況下,它是「2」而不是「名稱」。但在這種情況下,我必須先看到數組鍵,然後相應地更改該值,所以如果在任何文本文件中更改了「名稱」的位置,我的腳本將會中斷。但非常感謝,因爲這可以工作。 – Sugat

0

最有可能你仍然有換行符在你的陣列中的每個「線」的終結。嘗試加載這樣的:

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

我嘗試過,但它不工作。再次「未找到」 – Sugat

+0

'var_dump($ file_array)'顯示什麼? –

+0

基本上這 - >陣列(13){[0] =>串(70) 「ÿþA註冊已經接收到」[1] =>串(1) 「」[2] =>串(21)「名稱:test「[3] => string(33)」Lastname:test2「..... contd。} – Sugat