在 excel 中导出多维数组或在 laravel 中导出 csv
Export multidimensional array in excel or csv in laravel
现在对我来说真的很复杂。
在这里我必须将多维数组数据导出到 excel 中,如下图所示,但我无法实现。
请帮我把多维数组数据导出到excel。
我有一个来自关系查询的数组,例如:
$array = [
0 => [
'name' => 'Devat Karetha',
],
1 => [
'name' => 'John Doe',
'schools' => [
0 => [
'school_name' => 'ABC School',
'school_address' => 'ABC Address',
],
1 => [
'school_name' => 'XYZ School',
'school_address' => 'XYZ Address',
]
],
'sports' => [
0 => [
'id' => 8,
'sport_type' => [
'id' => 2
'sport_type_name' => 'ABC Sport'
],
],
1 => [
'id' => 8,
'sport_type' => [
'id' => 3
'sport_type_name' => 'ABC Sport'
],
],
],
],
2 => [
'name' => 'Utkarsh Raval',
'schools' => [],
'sports' => [
0 => [
'id' => 8,
'sport_type' => [
'id' => 2
'sport_type_name' => 'DEKTS Sport'
],
],
],
'centre' => [
0 => [
'id' => 4,
'centre_name' => 'ABC Centre',
'centre_mobile' => '9898989898',
],
1 => [
'id' => 5,
'centre_name' => 'XYZ Centre',
'centre_mobile' => '7878787878',
],
]
],
];
谢谢...:)
我在这里给出我自己对这个问题的回答 - 可能会帮助其他人理解多维数组的导出功能:
$newArr = [];
$arr = [];
foreach($result as $key => $value) {
$count = [count($value['schools']),count($value['centre']),count($value['sports'])];
$arrMax = max($count);
if($arrMax > 0){
for($i=0; $i < $arrMax; $i++){
$arrIndex = $i;
$arr['sr_no'] = '';
$arr['name'] = '';
if($arrIndex == '0'){
$arr['sr_no'] = $key + 1;
$arr['name'] = isset($value['name']) ? $value['name'] : '';
}
$arr['school_name'] = isset($value['schools'][$arrIndex]['school_name']) ? $value['schools'][$arrIndex]['school_name'] : '';
$arr['school_address'] = isset($value['schools'][$arrIndex]['school_address']) ? $value['schools'][$arrIndex]['school_address'] : '';
$arr['sport_type_name'] = isset($value['sports'][$arrIndex]['sport_type']['sport_type_name']) ? $value['sports'][$arrIndex]['sport_type']['sport_type_name'] : '';
$arr['centre_name'] = isset($value['centre'][$arrIndex]['centre_name']) ? $value['centre'][$arrIndex]['centre_name'] : '';
$arr['centre_mobile'] = isset($value['centre'][$arrIndex]['centre_mobile']) ? $value['centre'][$arrIndex]['centre_mobile'] : '';
$newArr[] = $arr;
}
} else {
$arr['sr_no'] = $key + 1;
$arr['name'] = isset($value['name']) ? $value['name'] : '';
$arr['school_name'] = '';
$arr['school_address'] = '';
$arr['sport_type_name'] = '';
$arr['centre_name'] = '';
$arr['centre_mobile'] = '';
$newArr[] = $arr;
}
}
/**
* @param $excel
*/
\Excel::create('advance-report-'.date('d-m-YTH-i-s'), function($excel) use($newArr) {
$excel->sheet('Sheet 1', function($sheet) use($newArr) {
$sheet->fromArray($newArr);
// Freeze first row
$sheet->freezeFirstRow();
// Set height for header
$sheet->setHeight(1, 30);
// Modify properties of header
$sheet->cells('A1:AS1', function($cells) {
$cells->setBackground('#345fbc');
$cells->setFontColor('#ffffff');
$cells->setValignment('center');
});
for( $intRowNumber = 1; $intRowNumber <= count($newArr) + 1; $intRowNumber++){
laravelExcel($sheet, $intRowNumber); //helper function
}
});
})->export('xls');
在辅助文件中:
/**
* @param null $sheet
* @param null $intRowNumber
*/
function laravelExcel($sheet = null, $intRowNumber = null)
{
try {
$sheet->setSize('A' . $intRowNumber, 10, 18);
$sheet->setSize('B' . $intRowNumber, 20, 18);
$sheet->setSize('C' . $intRowNumber, 20, 18);
$sheet->setSize('D' . $intRowNumber, 20, 18);
$sheet->setSize('E' . $intRowNumber, 35, 18);
$sheet->setSize('F' . $intRowNumber, 15, 18);
$sheet->setSize('G' . $intRowNumber, 15, 18);
} catch (\Exception $e) {
return $e->getMessage();
}
}
现在对我来说真的很复杂。
在这里我必须将多维数组数据导出到 excel 中,如下图所示,但我无法实现。
请帮我把多维数组数据导出到excel。
我有一个来自关系查询的数组,例如:
$array = [
0 => [
'name' => 'Devat Karetha',
],
1 => [
'name' => 'John Doe',
'schools' => [
0 => [
'school_name' => 'ABC School',
'school_address' => 'ABC Address',
],
1 => [
'school_name' => 'XYZ School',
'school_address' => 'XYZ Address',
]
],
'sports' => [
0 => [
'id' => 8,
'sport_type' => [
'id' => 2
'sport_type_name' => 'ABC Sport'
],
],
1 => [
'id' => 8,
'sport_type' => [
'id' => 3
'sport_type_name' => 'ABC Sport'
],
],
],
],
2 => [
'name' => 'Utkarsh Raval',
'schools' => [],
'sports' => [
0 => [
'id' => 8,
'sport_type' => [
'id' => 2
'sport_type_name' => 'DEKTS Sport'
],
],
],
'centre' => [
0 => [
'id' => 4,
'centre_name' => 'ABC Centre',
'centre_mobile' => '9898989898',
],
1 => [
'id' => 5,
'centre_name' => 'XYZ Centre',
'centre_mobile' => '7878787878',
],
]
],
];
谢谢...:)
我在这里给出我自己对这个问题的回答 - 可能会帮助其他人理解多维数组的导出功能:
$newArr = [];
$arr = [];
foreach($result as $key => $value) {
$count = [count($value['schools']),count($value['centre']),count($value['sports'])];
$arrMax = max($count);
if($arrMax > 0){
for($i=0; $i < $arrMax; $i++){
$arrIndex = $i;
$arr['sr_no'] = '';
$arr['name'] = '';
if($arrIndex == '0'){
$arr['sr_no'] = $key + 1;
$arr['name'] = isset($value['name']) ? $value['name'] : '';
}
$arr['school_name'] = isset($value['schools'][$arrIndex]['school_name']) ? $value['schools'][$arrIndex]['school_name'] : '';
$arr['school_address'] = isset($value['schools'][$arrIndex]['school_address']) ? $value['schools'][$arrIndex]['school_address'] : '';
$arr['sport_type_name'] = isset($value['sports'][$arrIndex]['sport_type']['sport_type_name']) ? $value['sports'][$arrIndex]['sport_type']['sport_type_name'] : '';
$arr['centre_name'] = isset($value['centre'][$arrIndex]['centre_name']) ? $value['centre'][$arrIndex]['centre_name'] : '';
$arr['centre_mobile'] = isset($value['centre'][$arrIndex]['centre_mobile']) ? $value['centre'][$arrIndex]['centre_mobile'] : '';
$newArr[] = $arr;
}
} else {
$arr['sr_no'] = $key + 1;
$arr['name'] = isset($value['name']) ? $value['name'] : '';
$arr['school_name'] = '';
$arr['school_address'] = '';
$arr['sport_type_name'] = '';
$arr['centre_name'] = '';
$arr['centre_mobile'] = '';
$newArr[] = $arr;
}
}
/**
* @param $excel
*/
\Excel::create('advance-report-'.date('d-m-YTH-i-s'), function($excel) use($newArr) {
$excel->sheet('Sheet 1', function($sheet) use($newArr) {
$sheet->fromArray($newArr);
// Freeze first row
$sheet->freezeFirstRow();
// Set height for header
$sheet->setHeight(1, 30);
// Modify properties of header
$sheet->cells('A1:AS1', function($cells) {
$cells->setBackground('#345fbc');
$cells->setFontColor('#ffffff');
$cells->setValignment('center');
});
for( $intRowNumber = 1; $intRowNumber <= count($newArr) + 1; $intRowNumber++){
laravelExcel($sheet, $intRowNumber); //helper function
}
});
})->export('xls');
在辅助文件中:
/**
* @param null $sheet
* @param null $intRowNumber
*/
function laravelExcel($sheet = null, $intRowNumber = null)
{
try {
$sheet->setSize('A' . $intRowNumber, 10, 18);
$sheet->setSize('B' . $intRowNumber, 20, 18);
$sheet->setSize('C' . $intRowNumber, 20, 18);
$sheet->setSize('D' . $intRowNumber, 20, 18);
$sheet->setSize('E' . $intRowNumber, 35, 18);
$sheet->setSize('F' . $intRowNumber, 15, 18);
$sheet->setSize('G' . $intRowNumber, 15, 18);
} catch (\Exception $e) {
return $e->getMessage();
}
}