如何使用codeigniter读取关联数组中的excel文件?

时间:2017-05-16 07:44:11

标签: php arrays excel codeigniter phpexcel

在这里,我使用PHPexcel库来读取文件。我的excel文件看起来像

enter image description here

控制器

class Home extends CI_Controller {
    public function index() {
        $this->load->library('excel');
        $reader = PHPExcel_IOFactory::createReader('Excel2007');
        $reader->setReadDataOnly(true);
        $file = isset($_FILES["uploadexcel"]['tmp_name']) ? $_FILES["uploadexcel"]['tmp_name'] : '';
        $excel = $reader->load($file);
        foreach ($excel->getWorksheetIterator() as $worksheet) {
            $worksheets = $worksheet->toArray();
        }
        echo '<pre>';print_r($worksheets);
    }
}

当我上传excel文件时,我的数组如下:

 Array
 (
  [0] => Array
    (
        [0] => url
        [1] => category_1
        [2] => category_2
        [3] => language
        [4] => f_n
        [5] => publishers
        [6] => cost
        [7] => cost_currency
        [8] => processing_time
        [9] => example
        [10] => note
    )
    [1] => Array
    (
        [0] => gettingaway.com
        [1] => 10
        [2] => 14
        [3] => GA
        [4] => nofollow
        [5] => 2
        [6] => 1245
        [7] => 
        [8] => 12
        [9] => testing
        [10] => Testing Value
    )


 )

但是,我希望数组如下:

Array
   (
    [0] => Array
    (
        [url] => gettingaway.com
        [category_1] => 10
        [category_2] => 14
        [language] => GA
        [f_n] => nofollow
        [publishers] => Cust Angel
        [cost] => 12
        [cost_currency] => USD
        [processing_time] => 12
        [example] => example
        [note] => note
    )   
    [1] => Array
    (
        [url] => thebusbench.com
        [category_1] => 5
        [category_2] => 13
        [language] => GA
        [f_n] => nofollow
        [publishers] => Cust Angel
        [cost] => 12
        [cost_currency] => USD
        [processing_time] => 6
        [example] => example
        [note] => note
    )   
    [2] => Array
    (
        [url] => travelintelligence.net
        [category_1] => 6
        [category_2] => 11
        [language] => GA
        [f_n] => nofollow
        [publishers] => Cust Angel
        [cost] => 12
        [cost_currency] => USD
        [processing_time] => 2
        [example] => example
        [note] => note
    )      
 )

在上面的数组中,我的发布商密钥值是2.即发布者进入我的数据库的Id。我希望这个相关的id发布者名称成为数组。在我的数据库中,ID 2相关的发布者名称是 Cust Angel

2 个答案:

答案 0 :(得分:1)

在这里,我的问题解决方案..

 $reader = PHPExcel_IOFactory::createReader('Excel2007');
    $reader->setReadDataOnly(true);
    $file = isset($_FILES["uploadexcel"]['tmp_name']) ? $_FILES["uploadexcel"]['tmp_name'] : '';
    $objPHPExcel = $reader->load($file);
    $objWorksheet = $objPHPExcel->getActiveSheet();
    $header=true;
    if ($header) {
        $highestRow = $objWorksheet->getHighestRow();
        $highestColumn = $objWorksheet->getHighestColumn();
        $headingsArray = $objWorksheet->rangeToArray('A1:' . $highestColumn . '1', null, true, true, true);
        $headingsArray = $headingsArray[1];
        $r = -1;
        $namedDataArray = array();
        for ($row = 2; $row <= $highestRow; ++$row) {
            $dataRow = $objWorksheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, null, true, true, true);
            if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) {
                ++$r;
                foreach ($headingsArray as $columnKey => $columnHeading) {
                    $namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey];
                }
            }
        }
    } else {
        //excel sheet with no header
        $namedDataArray = $objWorksheet->toArray(null, true, true, true);
    }
    echo '<pre>';print_r($namedDataArray);exit;
 }

输出: -

Array
 (
  [0] => Array
         (
        [url] => gettingaway.com
        [category_1] => Finance
        [category_2] => General
        [language] => GA
        [f_n] => nofollow
        [publishers] => KAlw
        [cost] => 1245
        [cost_currency] => 
        [processing_time] => 12
        [example] => testing
        [note] => Testing Value
    )

[1] => Array
    (
        [url] => thebusbench.com
        [category_1] => Books & Writing
        [category_2] => Games
        [language] => GA
        [f_n] => nofollow
        [publishers] => Miclede
        [cost] => 12
        [cost_currency] => USD
        [processing_time] => 11
        [example] => fsdfsd fsdfd
        [note] => asd
    )

[2] => Array
    (
        [url] => travelintelligence.net
        [category_1] => Finance
        [category_2] => Food & Drinks
        [language] => GA
        [f_n] => follow
        [publishers] => Micel 
        [cost] => 123
        [cost_currency] => 
        [processing_time] => 25
        [example] => fsdfsd fsdfd
        [note] => dfmlsdflsdk fjsdlfj sdlfjsdl fjld
    )

[3] => Array
    (
        [url] => littleyayas.com
        [category_1] => Automotive
        [category_2] => General
        [language] => GA
        [f_n] => follow
        [publishers] => Cust Poo
        [cost] => 10200
        [cost_currency] => 
        [processing_time] => 5
        [example] => asds
        [note] => adasdd
    )

[4] => Array
    (
        [url] => tripwheeling.com
        [category_1] => Finance
        [category_2] => Finance
        [language] => GA
        [f_n] => follow
        [publishers] => Cust Angel
        [cost] => 152000
        [cost_currency] => 
        [processing_time] => 13
        [example] => dasd
        [note] => adas
    )

[5] => Array
    (
        [url] => gettingaway.com
        [category_1] => Home & Garden
        [category_2] => General
        [language] => EN
        [f_n] => nofollow
        [publishers] => abc
        [cost] => 250
        [cost_currency] => USD
        [processing_time] => 10
        [example] => asdasd
        [note] => asd
    )

 )

答案 1 :(得分:0)

如果可以帮助到此处结束的人,我发现了一个有问题的解决方案:

foreach ($excel->getWorksheetIterator() as $worksheet) {
    $worksheetArray = $worksheet->toArray();

    // assuming the header is in the first line
    $header = $worksheetArray[0];
    unset($worksheetArray[0]);

    $associativeArraySheet = array_map(static function ($row) use ($header) { return array_combine($header, $row); }, $worksheetArray);

    print_r($associativeArraySheet);
}