2011-07-26 3 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를 사용해 보았지만 아무 소용이 없었다. 또한 파일에서 작성하는 대신 단어의 일반 배열을 사용하면 제대로 작동합니다.

미리 감사드립니다.

업데이트 :이 문제의 목적은 먼저 어떤 필드가 전인지를 찾는 것입니다. 'Name'과 그 값 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"입니다. 그러나이 경우 배열 키를 먼저 확인한 다음 그에 따라 값을 변경해야하므로 "이름"의 위치가 텍스트 파일에서 변경되면 스크립트가 중단됩니다. 그러나 어쨌든 이것이 지금 일할 수 있기 때문에 고맙습니다. – Sugat

0

대개 배열의 각 "줄"의 끝에 줄 바꿈 문자가있을 가능성이 큽니다. 이런 식으로 넣어보십시오 :

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

나는 그것을 시도하지만 작품을 나던. 다시 "찾을 수 없음" – Sugat

+0

'var_dump ($ file_array)'는 무엇을 보여줍니까? –

+0

기본적으로 this -> array (13) {[0] => string (70) "등록이 접수되었습니다."[1] => 문자열 (1) ""[2] => 문자열 (21) "이름 : test "[3] => string (33)"성 : test2 "..... 계속 ... – Sugat

관련 문제