2016-09-13 2 views
0

Это содержимое моего файла spectrum_info.txt:array_diff() в PHP дает неожиданную информацию

raid,spectrum/raid_info.txt 
rbid,spectrum/rbid_info.txt 
rcid,spectrum/rcid_info.txt 
rdid,spectrum/rdid_info.txt 
reid,spectrum/reid_info.txt 

Когда я загрузить этот файл данных, используя ниже код

$s_types=file('spectrum/spectrum_info.txt'); 
$i=0; 
foreach($s_types as $s_type) 
{ 
    $s_arrfields = explode(',', $s_type); 
    $s_names[] = $s_arrfields[0]; 
    $sf_names[] = $s_arrfields[1]; 
} 

Я поставил file_names информацию из над файлом в массив $sf_names. Вручную я создал еще один массив, имеющий те же данные:

$f_temp=array("spectrum/raid_info.txt", 
              "spectrum/rbid_info.txt", 
              "spectrum/rcid_info.txt", 
              "spectrum/rdid_info.txt", 
              "spectrum/reid_info.txt", 
              "spectrum/rfid_info.txt", 
              "spectrum/rgid_info.txt", 
              "spectrum/rhid_info.txt"); 
          print_r($f_temp); 
          echo"<br/>"; 
          print_r($sf_names); 
          echo"<br/>"; 
          $result=array_diff($f_temp,$sf_names); 
          print_r($result); 

Оба массивы, имеющей те же данные. Тем не менее array_diff() показывает все элементы массива как разные.

Я пытаюсь это, потому что, когда я использовал $sf_names информацию о файле для чтения данных из этого конкретного файла, я получаю следующую ошибку.

Предупреждение: Файл (Спектра/raid_info.txt): не удалось открыть поток: недопустимый аргумент

Пожалуйста, помогите мне о array_diff() как, как изменить данные, загруженные из файла, равным создать вручную массив. Это может быть полезно при решении указанной выше ошибки. Благодарю.

+0

вам нужно исправить файл() первый – nogad

+0

RTFM: [файл()] (http://php.net/manual/en/function.file.php) 'Возвращаемые значения: ... Каждый элемент массива соответствует строке в файле, а новая строка все еще прикреплена', поэтому array_diff работает отлично, но вы сравниваете' "foo" == "foo \ n" ' –

+0

@MarcB Похоже на то, что файл не может быть открыт. – Mike

ответ

0

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

$s_types = file('spectrum/spectrum_info.txt', FILE_IGNORE_NEW_LINES); 

Для получения подробной информации см http://php.net/manual/en/function.file.php