php将excel数据转换为3d数组

时间:2017-09-15 04:50:52

标签: php excel multidimensional-array

我有一个excel文件,其数据是一个3d数组。

enter image description here

我正在使用PHPExcel Object将数据返回到3d数组中。但我只能返回一个二维数组。

    $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;
        }
  }

如何返回如下结果数组:

$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')
     ),
);

任何人都知道如何修改我的代码以返回预期的结果?任何答案都将不胜感激!

1 个答案:

答案 0 :(得分:1)

我不是一个php程序员,这个代码没有编译。在这里,我添加了我的代码来生成您期望的数组。它可以帮助您解决问题。我认为$ column是一个像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