Структура PHP Array - PullRequest
       1

Структура PHP Array

0 голосов
/ 15 февраля 2012

Я пытаюсь сгенерировать электронную таблицу MS Excel, используя PHPExcel 1.7.6 .У меня проблемы с определением структуры ожидаемого массива.

Код, который создает столбцы и строки, выглядит следующим образом:

function _headers() { 
        $i=0; 
        foreach ($this->data[0] as $field => $value) { 
            if (!in_array($field,$this->blacklist)) { 
                $columnName = Inflector::humanize($field); 
                $this->sheet->setCellValueByColumnAndRow($i++, 4, $columnName); 
            } 
        } 
        $this->sheet->getStyle('A4')->getFont()->setBold(true); 
        $this->sheet->getStyle('A4')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); 
        $this->sheet->getStyle('A4')->getFill()->getStartColor()->setRGB('969696'); 
        $this->sheet->duplicateStyle( $this->sheet->getStyle('A4'), 'B4:'.$this->sheet->getHighestColumn().'4'); 
        for ($j=1; $j<$i; $j++) { 
            $this->sheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($j))->setAutoSize(true); 
        } 
    } 

    function _rows() { 
        $i=5; 
        foreach ($this->data as $row) { 
            $j=0; 
            foreach ($row as $field => $value) { 
                if(!in_array($field,$this->blacklist)) { 
                    $this->sheet->setCellValueByColumnAndRow($j++,$i, $value); 
                } 
            } 
            $i++; 
        } 
    } 

В настоящее время я получаю 'Указан неверный аргумент для foreach () 'error.

Буду признателен, если кто-нибудь сможет обрисовать в общих чертах требуемую структуру массива.

1 Ответ

1 голос
/ 15 февраля 2012

Как сказал 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++; 
    } 

Проверка типа переменной перед передачей ее в функцию, специфичную для типа, никогда не является плохой идеей и может спасти большую головную боль в целом.

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