2016-01-22 2 views
0

В моем проекте Symfony2, я в настоящее время использую следующее за петлю:preg_match ошибки для петли с PHPExcel

 $blockCells = $worksheet->rangeToArray($firstRow.':'.$lastRow); 
     foreach ($blockCells as $cell) { 

      $newContent = $cell[0]; 

      // 2. RETRIEVE FOLDER ID 
      $re = '/^[^_]+(?=_)/'; 
      preg_match($re,$cell[0], $_myid); 
      $output->writeln('ID: '.$_myid[0]); 

      $activesheet->setCellValue('F'.$counter, $_myid); 

      $counter +=1; 
     } 
    } 

Но я получаю следующее сообщение об ошибке:

[Symfony\Component\Debug\Exception\ContextErrorException]    
Warning: preg_match() expects parameter 2 to be string, array given 

Только тогда, когда скрывая setCellValue, для цикла, кажется, работает хорошо. Поэтому кажется, что PHPExcel сталкивается с preg_match PHP.

У кого-нибудь есть идея, почему это происходит и как я могу это решить?

UPDATE (упрощенный код)

код выше, дает следующий вывод в консоли:

ID: 10 

После чего он будет бросать ошибку. Другими словами, цикл for запускается один раз, затем в конце, почти магически, он снова запускает цикл for без фактического выполнения его и останавливается из-за ошибки.

+1

Убедитесь, что переменная '$ _content' в' preg_match ($ re, $ _ content, $ _myid); 'и' preg_match ($ re, $ _content, $ my_match); 'не является массивом. PHP думает, что это так, и именно поэтому вы получаете эту ошибку. – Quixrick

+0

как Quixrick сказал, вы наверняка даете массив по строке 8. – MouradK

+1

Вы пробовали комментировать весь шаг 8, а затем раскомментировать их один за другим, чтобы узнать, что вызывает проблему? – qooplmao

ответ

0

Got it.

Оказывается, ошибка в этой строке:

$activesheet->setCellValue('F'.$counter, $_myid); 

, который должен быть:

$activesheet->setCellValue('F'.$counter, $_myid[0]); 

$ _myid (вместо $ _myid [0]) был принят в preg_match и действительно массив.

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