将PHP电子表格生成的多维数组转换为使用第一行作为列名的关联数组(键)

de90aj5v  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(77)

我正在使用php电子表格库,并能够获得工作表数据的多维数组。但现在我想通过使用工作表的第一行作为键将此数组转换为关联数组。

$arr_upsfile = explode('.', $_FILES['upsfile']['name']);
    $extension_ups = end($arr_upsfile);
    if('csv' == $extension_ups){
        $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Csv();

    }elseif('xls' == $extension_ups){
        $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Xls();

    }else {
        $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
     
    }
    $spreadsheet_ups = $reader_ups->load($_FILES['upsfile']['tmp_name']);
    $sheetData_ups = $spreadsheet_ups->getActiveSheet()->toArray();

   for($i=0;$i<count($sheetData_ups);$i++)
    {
        for($j=0;$j<count($sheetData_ups[0]);$j++)
        {
            if($i==0)
            {
                $columns[$j] = $sheetData_ups[$i][$j]; //getting columns name in array
            }
                    //tried pushing sheet array rows to dynamic keys from columns array
                    $ups[$i] = array(
                    " $columns[$j]" =>  $sheetData_ups[$i][0] );                  );

        }  
        
    }

    var_dump($ups);

字符串

mwg9r5ms

mwg9r5ms1#

你可以做一些小的改变;

$arr_upsfile = explode('.', $_FILES['upsfile']['name']);
$extension_ups = end($arr_upsfile);
if('csv' == $extension_ups){
    $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Csv();

}elseif('xls' == $extension_ups){
    $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Xls();

}else {
    $reader_ups = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
 
}
$spreadsheet_ups = $reader_ups->load($_FILES['upsfile']['tmp_name']);
$sheetData_ups = $spreadsheet_ups->getActiveSheet()->toArray();

$columns = $sheetData_ups[0];
$ups = [];
for ($i = 1; $i < count($sheetData_ups); $i++) {
    $row = $sheetData_ups[$i];
    $ups[$i] = array_combine($columns, $row);
}

var_dump($ups);

字符串
这将首先从电子表格的第一行获取列名。然后,它将创建一个名为ups的空关联数组。对于电子表格中的每一行,代码将在ups数组中创建一个新的键值对,其中键是列名,值是行中的值。

相关问题