2010-11-29 4 views
2

Эй, ребята и девочки, я в тупике. Попытка заставить array_search работать с этим скриптом.PHP array_search не работает

<?php 

$dir = '/var/www/html/pay.group.com/upload'; 
$i = 0; 


if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 

      if ($file != "." && $file != ".."){ 
      //convert files from pdf to text 
      exec("pdftotext /var/www/html/pay.group.com/upload/" . $file . " /var/www/html/tmp/converted/" . $file); 
      //create array from text files 
      $current_array = file("/var/www/html/tmp/converted/" . $file) or die ("<br/>**cannot find file to create array**"); 
      //search array 
      echo array_search('EMPLOYEE NO. ',$current_array);  
      $i++; 

      echo var_dump($current_array); 
      } 
     } 
     closedir($dh); 

     echo "$i files processed"; 
    } 
} 


?> 

Я ничего не получаю от array_search, и я не могу понять, почему его сводит с ума.

Ниже приведена соответствующая часть var_dump, которая работает правильно.

"NON NEGOTIABLE " [28]=> string(5) "9871 " [29]=> string(13) "EMPLOYEE NO. " [30]=> string(1) " " [31]=> string(3) "01 " [32]=> string(6) "SHIFT " [33]=> string(1) " " [34]=> string(4) "MIC " [35]=> string(19) "LOCATION HRS/UNITS " 

Есть ли что-то, что я делаю неправильно? Строка для поиска массива точно такая же, как в фактическом массиве, поэтому я не могу понять, почему он не возвращает индекс массива для меня.

Использование предварительного тега, это то, что я получаю.

[27]=> 
    string(15) "NON NEGOTIABLE 
" 
    [28]=> 
    string(5) "9871 
" 
    [29]=> 
    string(13) "EMPLOYEE NO. 
" 
    [30]=> 
    string(1) " 
" 
    [31]=> 
    string(3) "01 
" 
    [32]=> 
    string(6) "SHIFT 
" 
    [33]=> 
    string(1) " 
" 
    [34]=> 
    string(4) "MIC 
" 
    [35]=> 
    string(19) "LOCATION HRS/UNITS 
" 
    [36]=> 
    string(1) " 
" 
+0

Возможно, это проблема с именем ваших файлов. Я заметил, что кто-то еще попробовал эту часть кода, и это сработало. – Shoe 2010-11-29 20:02:38

ответ

3

Линии в загруженном файле находятся на отдельном линий. file() оставляет символы новой строки, прикрепленные к элементам массива, и причина, по которой поиск не работает.

Вы можете лишить перевод строку из всех элементов массива, как этот

array_walk($current_array, 'trim'); 

После этого ваш поиск должен работать.

Или, как сказал KingCrunch, используйте

file("/var/www/html/tmp/converted/" . $file, FILE_IGNORE_NEW_LINES); 
+0

См. конец моего сообщения. Я отредактировал его, чтобы добавить то, что я получаю, используя предварительный тег. – Hus 2010-11-29 19:52:36

1

Не обязательно ответ, но, возможно, вы должны попробовать var_dump на вашем поиске массива, иногда целые числа (в основном 1 и 0, как и в истинном и ложном) не печатаются правильно. Это точно скажет вам, что именно результат, а не что-то не печатать (это то, что я предполагаю, произошло, поскольку вы не сказали, что он напечатал).

+0

Я смущен, я использовал var_dump. Что вы подразумеваете под его использованием в поиске массива? – Hus 2010-11-29 19:49:26

+0

var_dump (array_search ('EMPLOYEE NO.', $ Current_array)); вместо эха, поэтому вы можете видеть результаты со всеми обрезками, хотя это не имеет значения, проблема кажется решена: p – ShaneK 2010-11-29 22:42:37

0

Я попытался скопировать код и все работало нормально.

Возможно, дайте in_array() попробовать. Это проверит, существует ли значение. Если это не сработает, попробуйте выполнить поиск строки без окончания пробела.

Смежные вопросы