Как сказал IsisCode, похоже, что вы смотрите не в ту сторону, связывая проблему с PHPExcel. Эта ошибка, как правило, просто говорит о том, что первый аргумент, предоставленный для foreach (), не является массивом.
Я не вижу ничего, указывающего на то, что проблема явно связана с начальным foreach в методе _headers (). Если в $ this-> data есть элемент не из массива, то ваш метод _rows () также может выдать ошибку.
Дано:
$this->data = Array(
Array('foo' => 'bar'),
'baz'
)
Это может привести к сбою второго foreach в _rows (), как пример. Ваше сообщение об ошибке должно указывать на то, что foreach () дает сбой, но в конечном итоге это звучит так, как будто у вас есть элемент не в массиве в $ this-> data, где вы этого не ожидаете. Если с этим ничего не поделаешь, то подумайте о том, что вы имеете дело с массивом, прежде чем вызывать foreach:
function _rows() {
$i=5;
foreach ($this->data as $row) {
$j=0;
if(!is_array($row)) { continue; } // Ignore non-array elements
foreach ($row as $field => $value) {
if(!in_array($field,$this->blacklist)) {
$this->sheet->setCellValueByColumnAndRow($j++,$i, $value);
}
}
$i++;
}
Проверка типа переменной перед передачей ее в функцию, специфичную для типа, никогда не является плохой идеей и может спасти большую головную боль в целом.