2011-07-26 54 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