MorganFreeFarm
MorganFreeFarm

Reputation: 3733

Very simple excel file to php array returns me too many nested arrays?

Excel file:

enter image description here

PHP code (excel to array):

function excel_to_array($excel_file) {
    $filename = dirname(dirname(__FILE__)) .'/admin/user_files/' . $excel_file['name'];
    $type = PHPExcel_IOFactory::identify($filename);
    $objReader = PHPExcel_IOFactory::createReader($type);
    $objPHPExcel = $objReader->load($filename);

    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
        $worksheets[] = $worksheet->toArray();
    }

    var_dump($worksheets);
}

Result:

array (size=1)
    0 =>
        array (size=2)
            0 =>
                array (size=1)
                    0 => string '0894090592' (length=10)
            1 =>
                array (size=1)
                    0 => string '0894040404' (length=10)

There is too much nested arrays for such a simple excel, I'm lookig for something like this:

$worksheets = ['0894090592', '0894040404'];

Is there a way ?

P.S: I will NOT have multiple columns, but will have more rows, like these!

Upvotes: 0

Views: 91

Answers (2)

Andreas
Andreas

Reputation: 23958

You can use array_column to get only the values in [0].

function excel_to_array($excel_file) {
    $filename = dirname(dirname(__FILE__)) .'/admin/user_files/' . $excel_file['name'];
    $type = PHPExcel_IOFactory::identify($filename);
    $objReader = PHPExcel_IOFactory::createReader($type);
    $objPHPExcel = $objReader->load($filename);

    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
        $worksheets[] = $worksheet->toArray();
    }

    // Here we get only the values to a flat array
    $worksheets = array_column($worksheets, 0);
    var_dump($worksheets);
}

Upvotes: 1

Adder
Adder

Reputation: 5868

Extracting the data:

function excel_to_array($excel_file) {
    $filename = dirname(dirname(__FILE__)) .'/admin/user_files/' . $excel_file['name'];
    $type = PHPExcel_IOFactory::identify($filename);
    $objReader = PHPExcel_IOFactory::createReader($type);
    $objPHPExcel = $objReader->load($filename);
    $worksheets = array();

    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
        $worksheetArray= $worksheet->toArray();
        foreach($worksheetArray as $row) {
            if(isset($row[0])) {
                $worksheets[] = $row[0];
            }
        }
    }

    var_dump($worksheets);
}

Upvotes: 1

Related Questions