2014-12-27 71 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

相关问题