2012-02-15 89 views
0

我正在嘗試使用PHPExcel 1.7.6生成MS Excel電子表格。我無法確定預期數組的結構。PHP Array結構

該積聚的列和行中的代碼如下:

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()參數無效」錯誤。

如果有人能夠列出所需的正確數組結構,我將不勝感激。

+1

您的錯誤消息表明$ this-> data [0]不是數組,通過嘗試print_r($ this-> data [0])開始調試 – IsisCode 2012-02-15 17:22:09

回答

1

正如IsisCode所說,這聽起來像是你在通過將問題與PHPExcel聯繫在一起看錯方向。該錯誤通常只是說提供給foreach()的第一個參數不是數組。

雖然在_headers()方法中,我沒有看到任何指示問題是顯式使用初始foreach的。如果$ this-> data中存在非數組元素,那麼您的_rows()方法也會產生錯誤。

鑑於:

$this->data = Array( 
    Array('foo' => 'bar'), 
    'baz' 
) 

這將導致在_rows第二的foreach()失敗,作爲一個例子。你的錯誤信息應該能夠指向你哪個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++; 
    } 

遞給一個特定類型的函數之前驗證變量的類型決不是一個壞主意,一般可以節省很多頭痛。