Reputation: 258
I have an excel file whose data is a 3d array.
I am using PHPExcel Object to return the data into 3d array. But I can only return a 2d array.
$objPHPExcel = PHPExcel_IOFactory::load($file);
$cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection();
foreach ($cell_collection as $cell) {
$column = $objPHPExcel->getActiveSheet()
->getCell($cell)
->getColumn();
$row = $objPHPExcel->getActiveSheet()
->getCell($cell)
->getRow();
$data_value = $objPHPExcel->getActiveSheet()
->getCell($cell)
->getValue();
if ($row == 1) {
$header[$row][$column] = $data_value;
} else {
$arr_data[$row][$column] = $data_value;
}
}
How can I return a result array like this:
$res = array(
[2]=>array(
[A] => A,//column A
[B] =>array([1]=>'red',[2]=>'pink',[3]=>'purple')
),
[3]=>array(
[A] => B,//column B
[B] =>array([1]=>'white',[2]=>'blue',[3]=>'black')
),
);
Anyone knows how I could modify my code to return the expected result? Any answer would be appreciated!
Upvotes: 0
Views: 149
Reputation: 1022
I am not a php programmer and this code not complied. Here I have added my code to generate your expected array. It can help you to solve your problem. I think $column is a column value like A,B.....
$i = 1;
$i_str = "";
$res = array();
foreach ($cell_collection as $cell) {
$column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn();
$row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow();
$data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue();
if ($row == 1) {
$header[$row][$column] = $data_value;
} else {
if($column == 'A' && $data_value != ""){
$i++;
$i_str = (string) $i;
$res[$i_str]['A'] = $data_value;
$res[$i_str]['B'] = array();
}
else if($column == 'B'){
$len = (string) (count($res[$i_str]['B']) + 1);
$res[$i_str]['B'][$len] = $data_value;
}
}
}
print_r($res) // here you will get your expected array
Upvotes: 1