PHP не может найти конкретные слова в массиве, созданном из файла - PullRequest
1 голос
/ 27 июля 2011

Я пытался извлечь конкретные слова из массива, который был создан из текстового файла с помощью функции file () в php.

Текстовый файл 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.'Тест'

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Конечно, это может быть проблема конца строки или проблема с кодировкой файла, я точно не знаю, как 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'];
}
0 голосов
/ 27 июля 2011

скорее всего, у вас все еще есть символы новой строки в конце каждой "строки" в вашем массиве. Попробуйте загрузить это так:

$file_array=file($file_name, FILE_IGNORE_NEW_LINES);
...