PHP将Excel转为数组时嵌套层级过多,如何转为一维数组?
解决方案:将单列Excel数据转为PHP一维数组
当然可以实现!针对你说的Excel仅含一列多行数据的场景,我们可以通过两种方式调整代码,直接得到你想要的一维数组['0894090592', '0894040404']。
方法一:遍历单元格直接提取值(更灵活)
这种方式能精准控制每一行的读取,还能轻松处理表头跳过、空行过滤等自定义需求:
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); $result = []; // 遍历所有工作表(你的场景只有一个,也可以直接取第一个工作表) foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { // 遍历工作表的每一行 foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // 确保读取空单元格(如果需要) foreach ($cellIterator as $cell) { // 提取当前单元格的值并加入结果数组 $result[] = $cell->getValue(); break; // 因为只有一列,取第一个单元格就停止当前行的遍历 } } } // 如果Excel有表头,需要跳过第一行的话,取消下面这行注释 // array_shift($result); var_dump($result); return $result; }
方法二:扁平化原代码的嵌套数组(更简洁)
如果你想保留原代码的toArray()逻辑,只需要在最后对嵌套数组做扁平化处理即可:
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 = []; foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { $worksheets[] = $worksheet->toArray(); } // 扁平化数组:合并工作表数据(仅一个工作表时等价于取$worksheets[0]),再提取每一行的第一个元素 $flatArray = array_column(array_merge(...$worksheets), 0); // 若有表头,同样可以用array_shift($flatArray)移除 var_dump($flatArray); return $flatArray; }
补充说明
- 两种方法都能得到你需要的一维数组:方法一更适合需要自定义处理(比如跳过空行、格式化单元格值)的场景;方法二更简洁,适合简单的单列数据读取。
- 如果你的Excel存在表头行,记得取消代码中注释的
array_shift语句来移除表头元素。
内容的提问来源于stack exchange,提问作者MorganFreeFarm
相关产品推荐
相关产品推荐

