PHP array_search не работает - PullRequest
       3

PHP array_search не работает

2 голосов
/ 29 ноября 2010

Эй, парни и девушки, я в тупике. Попытка заставить 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) "
"

Ответы [ 4 ]

3 голосов
/ 29 ноября 2010

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

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

array_walk($current_array, 'trim');

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

Или, как сказал KingCrunch, использовать

file("/var/www/html/tmp/converted/" . $file, FILE_IGNORE_NEW_LINES);
2 голосов
/ 29 ноября 2010
$current_array = array_map('trim', $current_trim);

Может быть, FILE_IGNORE_NEW_LINES -Флаг также будет работать для вас.

1 голос
/ 29 ноября 2010

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

0 голосов
/ 29 ноября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...