2014-12-27 99 views
1

我對我的數組結果感到有點沮喪。理想情況下,我在我的應用程序中創建了一個表單製作模塊,我正在使用兩個不同的數組來建立我的數據庫列和Excel列。實質上,我使用數組提供的結果直接寫入一個php文件(Excel閱讀器文件)。爲了在Excel工作簿中建立差異,我在「excel_rows」數組中提出了一個標識符「page2」,「page3」等等。結合兩個不同數量的元素的單獨陣列

//my arrays 
$table_columns = array('field1','field2','field3','field4','field5'); //fields 
$excel_rows = array('c1','c2','page2','c3','c4','page3','c5'); //excel columns 

從這裏..我去嘗試過濾數組鍵..

foreach(array_keys($excel_rows) as $key){ 
$page = array_search(strpos(trim($excel_rows[$key]),'page'),$excel_rows); 
if(strpos(trim($excel_rows[$key]),'page') !== false){ 
$excel_row .= '$objTpl->setActiveSheetIndex('.(str_replace('page','',trim($excel_rows[$key])) -1).');<br/>'.PHP_EOL; 
$table_columns[$key] = 0; 
} 
else { 
$excel_row .= '$objTpl->getActiveSheet()->setCellValue(\''.trim($excel_rows[$key]).'\',$row[\''.trim($table_columns[$key]).'\']);<br/>'.PHP_EOL; 
} 
} 

print $excel_row; 

結果應該呼應了以下工作:

$objTpl->getActiveSheet()->setCellValue('c1', $row['field1']); 
$objTpl->getActiveSheet()->setCellValue('c2', $row['field2']); 
$objTpl->setActiveSheetIndex(1);<br/> 
$objTpl->getActiveSheet()->setCellValue('c3', $row['field4']); 
$objTpl->getActiveSheet()->setCellValue('c4', $row['field5']); 
$objTpl->setActiveSheetIndex(2); 
$objTpl->getActiveSheet()->setCellValue('c5', $row['']); 

正如人們所看到我從結果中缺少'field3','cs'產生並排空行而不是「field5」。

我假設像array_compare或array_combine是解決方案 - 我只是不能把它放在一起。

一切工作可愛與模塊赦免上面的數組代碼。任何與此有關的幫助將真誠地感謝!

-Regards。

+0

問題是field3與page2位於同一個鍵上,這就是爲什麼下一個字段是field4而不是field3,因爲您使用的是同一個鍵。解決方案將在頁面命令的同一個鍵上插入一個空字符串。 – 2014-12-27 21:46:23

+0

是的..這部分是給定的。嘗試確定是否存在以避免必須在設置/插入時爲「table_columns」提供空字符串。 – pm284 2014-12-27 21:58:35

+0

創建一個多維數組不是更好嗎? 'array(「page1」=> array(「c1,c2」),「page2」=> array(「c3」,「c4」),「page3」=> array(「c5」));' – 2014-12-27 22:04:41

回答

1

目前我是怎麼說的,當你創建一個新頁面時,你需要設置一個整數+1,然後從這個鍵中減去這個整數,這樣你就可以得到正確的字段。

$subkey = 0; 
foreach(array_keys($excel_rows) as $key){ 
    $fieldkey = $key - $subkey; 
    $page = array_search(strpos(trim($excel_rows[$key]),'page'),$excel_rows); 
    if(strpos(trim($excel_rows[$key]),'page') !== false){ 
     $excel_row .= '$objTpl->setActiveSheetIndex('.(str_replace('page','',trim($excel_rows[$key])) -1).');<br/>'.PHP_EOL; 
     //$table_columns[$key] = 0; I'm not sure what this is supposed to do 
     $subkey++; 
    } 
    else { 
     $excel_row .= '$objTpl->getActiveSheet()->setCellValue(\''.trim($excel_rows[$key]).'\',$row[\''.trim($table_columns[$fieldkey]).'\']);<br/>'.PHP_EOL; 
    } 
} 

print $excel_row; 
+0

抱歉,延遲響應。這是正確的答案。謝謝! – pm284 2014-12-28 00:33:03

相關問題